首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >十六进制中字母数字ID的sql查询

问十六进制中字母数字ID的sql查询
EN

Stack Overflow用户
提问于 2012-03-23 13:40:27
回答 2查看 875关注 0票数 0

我希望能够区分数字字符串和十六进制格式的字符串。

我目前的查询是:

代码语言:javascript
复制
<columnName> LIKE '?_____=' + REPLICATE('[0-9A-Fa-f]',16)

我在网上找到了一种搜索十六进制身份的方法,我认为它是有效的。然而,在得到一个大得多的样本后,我可以在我的结果中看到一个高的假阳性率。问题是,这给了我所有我想要的结果,但也给了我很多我不关心的结果。例如:

我想看看:

代码语言:javascript
复制
<url>.php?mains=d7ad916d1c0396ff

但我不想看到:

代码语言:javascript
复制
<url>.php?mblID=2007012422060265

这两个字符串的不同之处在于,我想收集的末尾的16个字符都是数字的,而不是十六进制ID。你们用什么方法将结果限制为十六进制ID?非常感谢。

更新: Juergen提出了一个很好的点,第二个数字可以是一个十六进制值。并非所有的十六进制数都包含a。我想把这个问题改头换面,说我想要的是一个有字母和数字的身份证,而不仅仅是数字。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-23 13:44:07

最简单的方法就是为这个限制添加一个单独的子句:

代码语言:javascript
复制
    <columnName> LIKE '?_____=' + REPLICATE('[0-9A-Fa-f]',16)
AND <columnName> NOT LIKE '?_____=' + REPLICATE('[0-9]',16)
票数 3
EN

Stack Overflow用户

发布于 2012-03-23 13:52:20

确定一个字符串是否只包含数字应该相当简单.

设置测试表:

代码语言:javascript
复制
CREATE TABLE #Temp (Data char(32)  not null)

INSERT #Temp
  values ('<url>.php?mains=d7ad916d1c0396ff')
        ,('<url>.php?mblID=2007012422060265 ')

编写一个查询:

代码语言:javascript
复制
SELECT
   right(Data, 16)             StringToCheck
  ,isnumeric(right(Data, 16))  IsNumeric
 from #Temp

取得结果:

代码语言:javascript
复制
StringToCheck   IsNumeric
d7ad916d1c0396ff    0
2007012422060265    1

因此,如果IsNumeric函数返回0,它可能是一个十六进制字符串。

这就提出了几个假设:

  • 最右边的16个字符是您想要检查的
  • ,您只点击过16个字符。我不知道字符串何时会变得太长而无法检查。
  • 是一个非数字字符,意思是十六进制。是否有可能将"Q“或"~”嵌入字符串?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9840202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档