正则表达式为一列有数字和字母但不是一个或另一个

时间:2015-02-19 10:52:57

标签: sql-server regex

我正在尝试搜索包含字母数字ID的列,但是想要编写一个返回包含字母和数字而不是一个或另一个的记录的查询。

i.e Acceptable: jjk44kndkfndFF

i.e Not acceptable: 223232323232   or  aajnfdskDFdd

到目前为止,我有:

where  PATINDEX('%[^a-zA-Z0-9 ]%',columnInQuestion)

返回所有字母数字记录。任何方向赞赏

2 个答案:

答案 0 :(得分:2)

我认为在WHERE子句中需要三个谓词:

WHERE (columnInQuestion NOT LIKE '%[^a-zA-Z0-9]%') AND 
      (PATINDEX('%[a-zA-Z]%', columnInQuestion) <> 0) AND
      (PATINDEX('%[0-9]%', columnInQuestion) <> 0)
  • 如果(columnInQuestion NOT LIKE '%[^a-zA-Z0-9]%')仅包含 字母数字字符,则第一个谓词columnInQuestion为真
  • 如果(PATINDEX('%[a-zA-Z]%', columnInQuestion) <> 0)
  • 中至少有一个字母字符,则第二个谓词columnInQuestion为真
  • 如果(PATINDEX('%[0-9]%', columnInQuestion) <> 0)
  • 中至少有一个数字字符,则第三个谓词columnInQuestion为真

答案 1 :(得分:0)

只需一个正则表达式就可以完成:

^[a-zA-Z0-9]*([a-zA-Z][0-9]|[0-9][a-zA-Z])[a-zA-Z0-9]*$

以0-x法定字符开头和结尾。

在某处,有一个从字母到数字或从数字到字母的切换。