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

新手上路,请多包涵

uniqueidentifier (SQL Server) 是否有等效于 IsDate 或 IsNumeric 的方法?或者有什么相当于(C#)TryParse 的吗?

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

我试图涵盖的场景如下:

 SELECT something FROM table WHERE IsUniqueidentifier(column) = 1

原文由 Benoittr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 416
2 个回答

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-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' as uniqueidentifier) 都成功了。

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

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

所以(借用 @r0d30b0y 的想法)一个稍微更健壮的版本可能是

;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 + '}%'

原文由 Martin Smith 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 BigQuery 中,您可以使用

SELECT *
FROM table
WHERE
  REGEXP_CONTAINS(uuid, REPLACE('^00000000-0000-0000-0000-000000000000$', '0', '[0-9a-fA-F]'))

原文由 p13rr0m 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进