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

时间:2014-12-19 16:10:48

标签: sql-server regex sql-like

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

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

所以这些字符串应该匹配:

  • ABCD1234
  • A1
  • abcdef2
  • AB123456

这些字符串不匹配:

  • ABCD
  • 1234
  • abcd1234abcd
  • 1abcd1

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

这样的事情会很好,但当然不起作用:

WHERE ColumnName LIKE '[%a-z][%0-9]'

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

谢谢, 吉姆

2 个答案:

答案 0 :(得分:7)

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

有关详细信息,请参阅here

根据您的需要使用:

WHERE ColumnName LIKE '[a-z]%[0-9]'

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

答案 1 :(得分:1)

如果您想使用Regex并拥有权限,您可以编写用户定义的函数,以便自己访问SQL Server的.NET CLR上的正则表达式解析器:

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx(SQL 2005及更高版本)