CHARINDEX做用sql
寫SQL語句咱們常常須要判斷一個字符串中是否包含另外一個字符串,可是SQL SERVER中並無像C#提供了Contains函數,不過SQL SERVER中提供了一個叫CHAEINDX的函數,顧名思義就是找到字符(char)的位置(index),既然可以知道所在的位置,固然就能夠判斷是否包含在其中了。express
經過CHARINDEX若是可以找到對應的字符串,則返回該字符串位置,不然返回0。函數
基本語法以下:this
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )3d
expressionToFind :目標字符串,就是想要找到的字符串,最大長度爲8000 。rest
expressionToSearch :用於被查找的字符串。blog
start_location:開始查找的位置,爲空時默認從第一位開始查找。字符串
CHAEINDEX示例get
1.簡單用法 it
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)
查詢結果:
返回結果爲0???,不要懷疑你的眼睛,由於大小寫敏感,找不到test因此返回的就是0,默認狀況下, SQL SERVER是大小不敏感的,因此咱們簡單示例中返回結果不爲0,可是有些時候咱們須要特地去區分大小寫,所以專門SQL SERVE提供了特殊的關鍵字用於查詢時區分大小寫,其中CS爲Case-Sensitve的縮寫。
4.大小寫不敏感
select charindex('Test','this Test is Test'COLLATE Latin1_General_CI_AS)
查詢結果:
咱們也能夠這樣說明是大小寫不敏感,其中CI是Case-InSensitve的縮寫,即大小寫不敏感,固然咱們不必畫蛇添足。
PATINDEX
和CHARINDEX相似,PATINDEX也能夠用來判斷一個字符串中是否包含另外一個字符串,兩種的差別在於,前者是全匹配,後者支持模糊匹配。
1.簡單示例
select PATINDEX('%ter%','interesting data')
查詢結果:
2.簡單示例2
select PATINDEX('%t_ng%','interesting data')
查詢結果:
PATINDEX也容許支持大小寫敏感,作法和CHARINDEX同樣,此處再也不累述。
參考:
https://docs.microsoft.com/en-us/sql/t-sql/functions/charindex-transact-sql
https://docs.microsoft.com/en-us/sql/t-sql/functions/patindex-transact-sql