最近有使用Microsoft SQL Server的朋友就如何使用SQL语句进行模糊查询连续咨询了我几个问题,现将问题及回答整理在此。
1.从字符串中找到第一个数字出现的位置
要解决这个问题,很明显是要使用字符串查找函数。T-SQL内置函数CHARINDEX、PATINDEX都可以实现子字符串位置的定位。这两个函数的定义如下:
CHARINDEX(expression1, expression2 [,start_location])
PATINDEX(‘%pattern%’ , expression)
可以看出,PATINDEX函数是支持匹配符的,可以用它来实现模糊查询。从字符串中找到第一个数字出现的位置可以使用 PATINDEX(‘%[0-9]%’,str) 来实现。
如果要截取从第一个数字后的所有字符就用SUBSTRING函数,用PATINDEX(‘%[0-9]%’,str)来作为起始位置,长度可以设置个绝对大的数值。SUBSTRING(str,PATINDEX(‘%[0-9]%’,str),255)。
2.用表a、表b的品名字段做为关键字,来进行模糊查询
SELECT 表a.品名,表b.品名 FROM 表a JOIN 表b
ON ‘%’+表a.品名+’%’ LIKE ‘%’+表b.品名+’%’