找到名称为 GUID 的 table

Find the table with the GUID as a name

我有 tables 以 GUID 作为他们生成的名称。

例如:

我有 table 个名字是:

FD962987-AA3E-441C-B608-2392B68A5287

508482AF-EFCF-41C1-B083-D51BF37C3590

数据库中还有一些其他 table。

我只想找到名称为 GUID 的 table。

我的尝试:

SELECT name 
FROM sys.tables 
WHERE LEN(tables.name) = 36 

上面的查询工作正常,但是当我有其他 tables(不是 GUID 名称)时,显示的 table 名称具有相同的长度。

试试这样的:

SELECT 
    name 
FROM 
    sys.tables 
WHERE 
    LEN(tables.name) = 36 
    AND (tables.name LIKE '%-%-%-%-%') --OR tables.name LIKE '%-____-____-____-%') 

如果您的 MS SQL 服务器版本支持它 (2012+),您可以为此使用 TRY_CONVERT
转换失败时为 TRY_CONVERT returns NULL。

SELECT t.name 
FROM sys.tables t 
WHERE LEN(t.name) = 36 
  AND TRY_CONVERT(UNIQUEIDENTIFIER, t.name) IS NOT NULL;

或者您可以使用带有字符范围的 LIKE。但这是一种相当反 golfcode 的方法。
由于 UNIQUEIDENTIFIER 具有非常特殊的格式,仅在 4 个破折号之间使用字符 ABCDEF0123456789

SELECT t.name 
FROM sys.tables t 
WHERE t.name like '[A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9]-[A-F0-9][A-F0-9][A-F0-9][A-F0-9]-[A-F0-9][A-F0-9][A-F0-9][A-F0-9]-[A-F0-9][A-F0-9][A-F0-9][A-F0-9]-[A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9][A-F0-9]'