查找以GUID为名称的表

时间:2019-04-29 07:29:52

标签: sql-server sql-server-2008-r2

我有一些以GUID为名称的表。

例如:

我的表的名称为:

FD962987-AA3E-441C-B608-2392B68A5287

508482AF-EFCF-41C1-B083-D51BF37C3590

并且在数据库中还有其他一些表。

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

我的尝试:

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

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

2 个答案:

答案 0 :(得分:4)

尝试类似的方法:

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

答案 1 :(得分:2)

如果您的MS SQL Server版本支持该版本(2012+),则可以使用TRY_CONVERT
转换失败时,TRY_CONVERT返回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]'