我希望能够区分数字字符串和十六进制格式的字符串。
我目前的查询是:
<columnName> LIKE '?_____=' + REPLICATE('[0-9A-Fa-f]',16)我在网上找到了一种搜索十六进制身份的方法,我认为它是有效的。然而,在得到一个大得多的样本后,我可以在我的结果中看到一个高的假阳性率。问题是,这给了我所有我想要的结果,但也给了我很多我不关心的结果。例如:
我想看看:
<url>.php?mains=d7ad916d1c0396ff但我不想看到:
<url>.php?mblID=2007012422060265这两个字符串的不同之处在于,我想收集的末尾的16个字符都是数字的,而不是十六进制ID。你们用什么方法将结果限制为十六进制ID?非常感谢。
更新: Juergen提出了一个很好的点,第二个数字可以是一个十六进制值。并非所有的十六进制数都包含a。我想把这个问题改头换面,说我想要的是一个有字母和数字的身份证,而不仅仅是数字。
发布于 2012-03-23 13:44:07
最简单的方法就是为这个限制添加一个单独的子句:
<columnName> LIKE '?_____=' + REPLICATE('[0-9A-Fa-f]',16)
AND <columnName> NOT LIKE '?_____=' + REPLICATE('[0-9]',16)发布于 2012-03-23 13:52:20
确定一个字符串是否只包含数字应该相当简单.
设置测试表:
CREATE TABLE #Temp (Data char(32) not null)
INSERT #Temp
values ('<url>.php?mains=d7ad916d1c0396ff')
,('<url>.php?mblID=2007012422060265 ')编写一个查询:
SELECT
right(Data, 16) StringToCheck
,isnumeric(right(Data, 16)) IsNumeric
from #Temp取得结果:
StringToCheck IsNumeric
d7ad916d1c0396ff 0
2007012422060265 1因此,如果IsNumeric函数返回0,它可能是一个十六进制字符串。
这就提出了几个假设:
https://stackoverflow.com/questions/9840202
复制相似问题