找到GUID作为名称的表

问题描述 投票:1回答:2

我有表格与GUID作为他们的名字生成。

例如:

我的表格名称为:

FD962987-AA3E-441C-B608-2392B68A5287

508482AF-EFCF-41C1-B083-D51BF37C3590

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

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

我的尝试:

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

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

sql-server sql-server-2008-r2
2个回答
4
投票

尝试类似的东西:

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

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。但这是一种相当反高尔夫球的方法。 由于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]'
© www.soinside.com 2019 - 2024. All rights reserved.