在t-sql中,有没有办法在类似的语句中进行模式匹配,这样你就可以搜索给定集合中的1个或多个字符?
具体来说,我试图提出一个LIKE语句,该语句将返回以1个或多个字母开头并以1个或更多数字结尾的字符串。
所以这些字符串应该匹配:
这些字符串不匹配:
我知道您可以使用%通配符来匹配0个或更多字符的字符串,并且您可以使用方括号[]来匹配给定集合中的单个字符。但有没有办法将这些组合起来,以便我可以匹配给定集合中的1个或多个字符?
这样的事情会很好,但当然不起作用:
WHERE ColumnName LIKE '[%a-z][%0-9]'
有谁知道这个问题的解决方案?或者它在SQL Server中是不可能的?
谢谢, 吉姆
答案 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及更高版本)