SQL十六进制字符串比较

时间:2012-02-02 15:15:16

标签: sql string

背景

我的ID号码有一个sql DB。它们看起来像“44b1e3d6e8ee4da7”,到目前为止,我已经能够根据差异查询检测到它们。

查询:

use [table]
select date,id
from View
 with(nolock) where id like '________________'
 and DIFFERENCE(substring(id,charindex('?____=', id)+6,  
 (len(id) - (charindex('?____=', id) +5)) ), 'ae93ed317663c028') > 0

但现在数据有所改变,人们正在加入像这样的“251& r = 1328129429”。

如何轻松快速地区分“44b1e3d6e8ee4da7”和“251& r = 1328129429”之间的区别?我知道它们都是16个字符。我知道第二个字符串有&和a =,但我不想使用额外的AND!CONTAINS“& or =”除非我必须这样做。

有什么建议吗?

更新至问题:

正如@gbn所说我原来的问题没有得到回答。这是因为这只是一个部分问题。当时我完全不知道我在问什么。我的问题已经变成“如何从我的结果池中删除其中包含特殊字符的字符串,只留下16位十六进制字符串。

@MartinSmith提供了一个很好的代码示例来回答这个问题。感谢@MartinSmith在我的问题中查看真正的问题并回答它。它显示了大量的线性思维,我赞赏你的努力和答案。谢谢。

1 个答案:

答案 0 :(得分:2)

要查找“16个字符长且为十六进制格式”的字符串,您可以使用

WHERE id LIKE REPLICATE('[0-9A-Fa-f]',16)