sql-server - 如何检查 VARCHAR 字符串是否(不是)十六进制?

标签 sql-server tsql hex string-conversion base36

TL;DR 选择行时如何测试字符串是否为十六进制?


如果我有一个带有 GUID 的表,其中一些是 Base36 而不是十六进制:

  ID | GUID
  ===|=================================
   1 | CAFEBABECAFED00DB16B00B515BADA55
   2 | 0123456789ABCDEFGHIJKLMNOPQRSTUV
   3 | DEADBEAF4D15EA5EDEFEC8EDFEE1DEAD

我想获取所有 GUID 不是十六进制的行。

对于单例,我可以尝试 CONVERT(VARBINARY(32),[GUID],2) 看看它是否失败,但我不能在查询中这样做。如果我可以查询 WHERE isNaN(parseInt(GUID,16)),它将是故障安全的(同时必须应用于所有行)。

当然,我可以全文搜索 F 之后的字母(WHERE [GUID] LIKE '%g%' OR [GUID] LIKE '%h%' OR ...),但这是最后一个度假式的方法让我问了这个问题:

如何查询(非)仅限十六进制字段?

最佳答案

;WITH rw AS
(
    SELECT '0000AF0012B' ishexornot
    UNION ALL
    SELECT '0000AF0012G'
    UNION ALL
    SELECT '0000AF0012 '
)
SELECT *, CASE WHEN ishexornot LIKE '%[^0-9A-F]%' THEN 0 ELSE 1 END
FROM rw

所以

WHERE [GUID] LIKE '%[^0-9A-F]%'

关于sql-server - 如何检查 VARCHAR 字符串是否(不是)十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37939324/

相关文章:

sql-server - 删除所有表时出错 "DELETE failed because the following SET options have incorrect settings: ' QUOTED_IDENTIFIER'"

sql - 如何在 Db 中实现嵌套组?

mysql - SQL 中的字符串操作问题从逗号分隔字符串中删除下划线和其后的字符

c# - 比较 Entity Framework 5 中 Any() 与 Count() 生成查询的性能

excel - 将任何长度的有符号十六进制数转换为有符号十进制数 (Excel)

colors - 以这种方式表示颜色#ffffff 和 0xffffff 有什么区别?

sql-server - 错误 : No process is on the other end of the pipe

sql - 期初和期末余额总和

SQL解析键值字符串

Java:有人可以从 "Thinking in Java 4th edition"解释一下吗?