uniqueidentifier (SQL Server) 是否有等效于 IsDate 或 IsNumeric 的方法?或者有什么相当于(C#)TryParse 的吗?
否则我将不得不编写自己的函数,但我想确保我不会重新发明轮子。
我试图涵盖的场景如下:
SELECT something FROM table WHERE IsUniqueidentifier(column) = 1
原文由 Benoittr 发布,翻译遵循 CC BY-SA 4.0 许可协议
uniqueidentifier (SQL Server) 是否有等效于 IsDate 或 IsNumeric 的方法?或者有什么相当于(C#)TryParse 的吗?
否则我将不得不编写自己的函数,但我想确保我不会重新发明轮子。
我试图涵盖的场景如下:
SELECT something FROM table WHERE IsUniqueidentifier(column) = 1
原文由 Benoittr 发布,翻译遵循 CC BY-SA 4.0 许可协议
SQL Server 2012 使用
TRY_CONVERT(UNIQUEIDENTIFIER, expression)
让这一切变得更容易对于 SQL Server 的早期版本,现有答案遗漏了一些要点,这意味着它们可能与 SQL Server 实际上将转换为
UNIQUEIDENTIFIER
的字符串不匹配而没有抱怨,或者最终可能仍会导致无效转换错误。SQL Server 接受包装在
{}
或不包装的 GUID。此外,它会忽略字符串末尾的无关字符。例如,
SELECT CAST('{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss' as uniqueidentifier)
和SELECT CAST('5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' as uniqueidentifier)
都成功了。在大多数默认排序规则下,
LIKE '[a-zA-Z0-9]'
最终将匹配À
或Ë
等字符最后,如果将结果中的行转换为 uniqueidentifier ,则将转换尝试放在 case 表达式中很重要,因为转换可能在
WHERE
过滤行之前发生。所以(借用 @r0d30b0y 的想法)一个稍微更健壮的版本可能是