SQL Server, combining % and [] wildcards in LIKE statement

强颜欢笑 提交于 2019-11-29 19:53:01

问题


In t-sql, is there a way to do pattern matching in a like statement such that you can search for 1 or more characters in a given set?

To be specific, I'm trying to come up with a LIKE statement that will return strings that begin with 1 or more letters and end in 1 or more numbers.

So these strings should match:

  • abcd1234
  • a1
  • abcdef2
  • ab123456

And these strings should not match:

  • abcd
  • 1234
  • abcd1234abcd
  • 1abcd1

I know you can use the % wildcard to match a string of 0 or more characters, and you can use brackets[] to match a single character in a given set. But is there any way to combine those so that I can match on 1 or more characters in a given set?

Something like this would be nice, but of course doesn't work:

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

Does anyone know of a solution to this problem? Or is it just not possible in SQL Server?

Thanks, Jim


回答1:


Like pattern matching is very limited, it does not allow for normal regular expressions.

See here for details.

For your needs use:

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

This will match any letter followed by anything, followed by a number. SQL will enforce that the letter and number are at the two ends of the string because there is no pattern or literal character before or after our [] match set.




回答2:


If you want to use Regex and have permissions, you can write a user defined function to give yourself access to the Regular Expressions parser on the SQL server's .NET CLR:

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx (SQL 2005 and higher)



来源:https://stackoverflow.com/questions/27569788/sql-server-combining-and-wildcards-in-like-statement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!