我有一些以GUID
为名称的表。
例如:
我的表的名称为:
FD962987-AA3E-441C-B608-2392B68A5287
508482AF-EFCF-41C1-B083-D51BF37C3590
并且在数据库中还有其他一些表。
我只想找到名称为GUID
的表。
我的尝试:
SELECT name
FROM sys.tables
WHERE LEN(tables.name) = 36
上面的查询工作正常,但是当我有其他具有相同表名长度的表(不是GUID名称)时显示。
答案 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]'