SQL Server,在LIKE语句中组合%和[]通配符

Jim*_*Jim 7 regex sql-server sql-like

在t-sql中,有没有办法在类似的语句中进行模式匹配,这样你就可以搜索给定集合中的1个或多个字符?

具体来说,我试图想出一个LIKE语句,它将返回以1个或更多字母开头并以1个或更多数字结尾的字符串.

所以这些字符串应匹配:

  • ABCD1234
  • A1
  • abcdef2
  • AB123456

这些字符串不应该匹配:

  • A B C D
  • 1234
  • abcd1234abcd
  • 1abcd1

我知道你可以使用%通配符匹配0或更多字符的字符串,你可以使用方括号[]来匹配给定集合中的单个字符.但有没有办法将这些组合起来,以便我可以匹配给定集合中的1个或多个字符?

像这样的东西会很好,但当然不起作用:

WHERE ColumnName LIKE '[%a-z][%0-9]'
Run Code Online (Sandbox Code Playgroud)

有谁知道这个问题的解决方案?或者它在SQL Server中是不可能的?

谢谢,吉姆

Jef*_*der 8

像模式匹配非常有限,它不允许正常的正则表达式.

详情请见此处.

根据您的需要使用:

WHERE ColumnName LIKE '[a-z]%[0-9]'
Run Code Online (Sandbox Code Playgroud)

这将匹配任何字母后跟任何字母,后跟一个数字.SQL将强制字母和数字位于字符串的两端,因为在[]匹配集之前或之后没有模式或文字字符.

  • @Jim `WHERE ColumnName LIKE '[az]%[0-9]' AND ColumnName NOT LIKE '%[0-9][az]%'`? (4认同)
  • @Jim - 虽然我想你实际上需要第三个来排除包含既不是字母也不是数字的字符的字符串`AND ColumnName NOT LIKE '%[^0-9A-Z]%'` (3认同)
  • 是的,我已经认识到没有CLR就无法做到.感谢您的建议,但这并不能满足我的需求.当它不应该时,它会像"a1234bcde1"匹配. (2认同)