gpt4 book ai didi

sql - 如何检查字符串是否是唯一标识符?

转载 作者:行者123 更新时间:2023-12-01 17:53:08 25 4
gpt4 key购买 nike

uniqueidentifier (SQL Server) 是否有与 IsDate 或 IsNumeric 等效的函数?或者有什么相当于 (C#) TryParse 的东西吗?

否则我将不得不编写自己的函数,但我想确保我没有重新发明轮子。

我试图描述的场景如下:

SELECT something FROM table WHERE IsUniqueidentifier(column) = 1

最佳答案

SQL Server 2012 通过 TRY_CONVERT(UNIQUEIDENTIFIER, expression) 让这一切变得更加容易

SELECT something
FROM your_table
WHERE TRY_CONVERT(UNIQUEIDENTIFIER, your_column) IS NOT NULL;

对于 SQL Server 的早期版本,现有答案遗漏了一些要点,这意味着它们可能与 SQL Server 实际上会毫无怨言地转换为 UNIQUEIDENTIFIER 的字符串不匹配,或者最终仍可能导致无效转换错误。

SQL Server 接受用 {} 封装或不封装的 GUID。

此外,它还会忽略字符串末尾的无关字符。 SELECT CAST('{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss' as uniqueidentifier)SELECT CAST('5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXX'作为唯一标识符) 例如成功。

在大多数默认排序规则下,LIKE '[a-zA-Z0-9]' 最终将匹配 ÀË 等字符>

最后,如果将结果中的行强制转换为 uniqueidentifier,请将强制转换尝试放入 case 表达式中,这一点很重要,因为强制转换可能会在 WHERE 过滤行之前发生。

因此(借用 @r0d30b0y's idea )一个稍微更强大的版本可能是

;WITH T(C)
AS (SELECT '5D944516-98E6-44C5-849F-9C277833C01B'
UNION ALL
SELECT '{5D944516-98E6-44C5-849F-9C277833C01B}'
UNION ALL
SELECT '5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
UNION ALL
SELECT '{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss'
UNION ALL
SELECT 'ÀD944516-98E6-44C5-849F-9C277833C01B'
UNION ALL
SELECT 'fish')
SELECT CASE
WHEN C LIKE expression + '%'
OR C LIKE '{' + expression + '}%' THEN CAST(C AS UNIQUEIDENTIFIER)
END
FROM T
CROSS APPLY (SELECT REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]') COLLATE Latin1_General_BIN) C2(expression)
WHERE C LIKE expression + '%'
OR C LIKE '{' + expression + '}%'

关于sql - 如何检查字符串是否是唯一标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4649317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com