sql先精確查詢後模糊查詢的方法,百度了下網上沒有找到合適的方法,
後來自己研究了CHARINDEX函數,發現可實行辦法!
場景:公司部門提了個功能需求,要搜索商品表裏的商品信息,先左匹配查詢然後模糊查詢
比如:要搜索襯衫,使用者需要先知道以襯衫%開頭的,然後再去模糊查詢xx襯衫xx,
一開始想到使用先精確查詢,然後再模糊查詢,再組合
select * from Produce where Name='襯衫'
union
select * from Produce where Name like '襯衫'
但是排序出來沒辦法實現
後來用CHARINDEX ,通過這種方式就可以實現
select * from Produce where Name like '%襯衫%'
order by CHARINDEX('襯衫',Name) asc
--------------------------------------------------------------------------------------------------------------------------------------------
通過CHARINDEX如果能夠找到對應的字符串,則返回該字符串位置,否則返回0。
基本語法如下:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
expressionToFind :目標字符串,就是想要找到的字符串,最大長度爲8000 。
expressionToSearch :用於被查找的字符串。
start_location:開始查找的位置,爲空時默認從第一位開始查找。
CHAEINDEX示例
1.簡單用法
select charindex('test','this Test is Test')
2.增加開始位置
select charindex('test','this Test is Test',7)
3.大小寫敏感
select charindex('test','this Test is Test'COLLATE Latin1_General_CS_AS)