我有表格与GUID
作为他们的名字生成。
例如:
我的表格名称为:
FD962987-AA3E-441C-B608-2392B68A5287
508482AF-EFCF-41C1-B083-D51BF37C3590
并且还在数据库中有一些其他表。
我只是想找到名为GUID
的表。
我的尝试:
SELECT name
FROM sys.tables
WHERE LEN(tables.name) = 36
上面的查询工作正常,但是当我有其他表(不是GUID名称)时,显示相同的len表名。
尝试类似的东西:
SELECT
name
FROM
sys.tables
WHERE
LEN(tables.name) = 36
AND (tables.name LIKE '%-%-%-%-%') --OR tables.name LIKE '%-____-____-____-%')
如果您的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。但这是一种相当反高尔夫球的方法。
由于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]'