1. sql中PATINDEX的用法
declare @str varchar(100)
declare @i int,@str1 varchar(10),@str2 varchar(10)
set @str='0+7+12-13+8-9*123' --要分解的字元串
declare @tb table(num varchar(20),operation varchar(2)) --定義保存結果的表
上面分別是聲明變數和 賦值 知道塞
set @i=patindex('%[^0-9]%',@str)
while @i>0
begin
select @str1=left(@str,@i-1)
,@str=substring(@str,@i,8000)
,@i=patindex('%[0-9]%',@str)
,@str2=left(@str,@i-1)
,@str=substring(@str,@i,8000)
,@i=patindex('%[^0-9]%',@str)
insert into @tb values(@str1,@str2)
end
if @str<>'' insert into @tb values(@str,'')
這些是 關於 拆分公式的 過程,具體,可以不用 完全理解,你只要明白就行了
2. SQLserver中字元串查找功能patindex和charindex的區別
patindex函數支持使用通配符,能夠用在很多有變化的查找中。而charindex不能夠
比如
patindex(%[a,z,0-9]%[a,z,0-9]%[a,z,0-9]%,xyzabc123)
3. SQl 函數PATINDEX('%s1%s2%',s),怎麼取得s1%s2的長度(即匹配模式串s1……s2的長度),或終止位置
如果非要實現這種效果,可以使用REVERSE函數。
--示例1
selectpatindex('%12%23%','1122334')
selectlen('1122334')-patindex('%32%21%',reverse('1122334'))+1
--示例2
selectpatindex('%12%23%','12534212423')
selectlen('12534212423')-patindex('%32%21%',reverse('12534212423'))+1
當然,不建議在SQL中直接處理這類問題,甚至不建議在SQL中使用patindex查詢,因為這種模式匹配無法使用已建索引,數據量較大情況下查詢會較慢。
4. SQLserver中字元串查找功能patindex和charindex的區別
CHARINDEX 和 PATINDEX 函數都返回指定模式的開始位置。PATINDEX 可以使用通配符,而 CHARINDEX 不能。
這兩個函數都帶有兩個參數:
(1)希望獲取其位置的模式。使用 PATINDEX,模式是可以包含通配符的文字字元串。 使用 CHARINDEX,模式是不包含通配符的文字字元串。
(2)字元串值表達式(通常為列名),用於搜索指定的模式。
參考下面的例子:
select CHARINDEX('庫','B倉庫1')--3
select CHARINDEX('%庫','B倉庫1')--0 不支持通配符匹配
select CHARINDEX('%庫%','B倉庫1')--0 不支持通配符匹配
select PATINDEX('庫','B倉庫1')--0 因為精確匹配
select PATINDEX('%庫%','B倉庫1')--3 支持通配符匹配
select PATINDEX('%庫','B倉庫1')--0 為滿足以'庫'結尾
select PATINDEX('B倉庫1','B倉庫1')--1
5. SQLserver中字元串查找功能patindex和charindex的區別
patindex(pattern,expression) 精確匹配,完全匹配1,不完全匹配0
例如:patindex('aa','aa') 返回1 完全匹配
patindex('aa','aab') 返回0 不完全匹配
patindex(%pattern%,expression)模糊匹配,返回從第幾位開始匹配
CHARINDEX 和 PATINDEX 函數都返回指定模式的開始位置。PATINDEX 可使用通配符,而 CHARINDEX 不可以。
這兩個函數都帶有2個參數:
1 希望獲取其位置的模式。使用 PATINDEX,模式是可以包含通配符的字面字元串。使用
CHARINDEX,模式是字面字元串(不能包含通配符)。
2 字元串值表達式(通常為列名)。
例如:patindex('%aa%','ssaaa') 返回3 模糊從第三位開始匹配
patindex('%aa','ssddaa') 返回5 模糊從第五位開始匹配
patindex('%aa','ssddaaa') 返回6 模糊從第六位開始匹配
patindex('%aa%','ssddaaa') 返回5 模糊從第五位開始匹配
charindex(pattern,expression)精確匹配,返回第一個滿足條件的下標
例如:charindex(aa,aas) 返回1 從第一位開始精確匹配
charindex(aa,saas) 返回2 從第二位開始精確匹配
charindex(aa,saaas) 返回2 從第二位開始精確匹配
charindex(aa,sas) 返回0 沒有完全精確匹配的
函數多試試就知道其用法了,多實踐
6. SQLserver中字元串查找功能patindex和charindex的區別
charindex和patindex函數常常用來在一段字元中搜索字元或字元串。假如被搜索的字元中包含有要搜索的字元,那麼這兩個函數返回一個非零的整數,這個整數是要搜索的字元在被搜索的字元中的開始位數。patindex函數支持使用通配符來進行搜索,然而charindex不支持通配符。接下來,逐個分析這兩個函數。
怎樣使用charindex函數
charindex函數返回字元或字元串在另一個字元串中的起始位置。charindex函數調用方法如下:
charindex ( expression1 , expression2 [ , start_location ] )
expression1是要到expression2中尋找的字元中,start_location是charindex函數開始在expression2中找expression1的位置。
charindex函數返回一個整數,返回的整數是要找的字元串在被找的字元串中的位置。假如charindex沒有找到要找的字元串,那麼函數整數「0」。讓看看下面的函數命令執行的結果:
charindex(sql, microsoft sql server)
這個函數命令將返回在「microsoft sql server」中「sql」的起始位置,在這個例子中,charindex函數將返回「s」在「microsoft sql server」中的位置11。
接下來,看這個charindex命令:
charindex(7.0, microsoft sql server 2000)
在這個例子中,charindex返回零,因為字元串「7.0」 不能在「microsoft sql server」中被找到。
接下來通過兩個例子來看看怎樣使用charindex函數來解決實際的t-sql問題。
第一個例子,假設要顯示northwind資料庫customer表前5行聯系人列的last name。這是前5行數據
contactname
------------------------------
maria anders
ana trujillo
antonio moreno
thomas hardy
christina berglund
能夠看到,customname包含客戶的first name和last name,他們之間被一個空格隔開。用charindx函數確定兩個名字中間空格的位置。通過這個方法,能夠分析contactname列的空格位置,這樣能夠只顯示這個列的last name部分。這是顯示northwind的customer表前5行last name的記錄
selecttop5substring(contactname,charindex(,contactname)+1,len(contactname))as[lastname]fromnorthwind.dbo.customers
下面是這個命令輸出的結果。
last name
------------------------------
anders
trujillo
moreno
hardy
berglund
charindex函數找到first name和last name之間的空格,所以substring函數能夠分開contactname列,這樣就只有last name被選出。在charindex函數返回的整數上加1,這樣last name不是從空格開始。
在第二個例子中,即如說要計算記錄中,某一個欄位包含特定字元的任何記錄數。charindex函數能夠方便的解決的問題。計算northwind.dbo.customer表中addresses欄位中包含單詞road或他的縮寫rd的記錄數,選擇語句類似這樣:
selectcount(*)fromnorthwind.dbo.customerswherecharindex(rd,address)>0orcharindex(road,address)>1
怎樣使用patindex函數
patindex函數返回字元或字元串在另一個字元串或表達式中的起始位置,patindex函數支持搜索字元串中使用通配符,這使patindex函數對於變化的搜索字元串很有價值。patindex函數的命令如下:
patindex ( %pattern% , expression )
pattern是要搜索的字元串,expression是被搜索的字元串。一般情況下expression是個表中的一個欄位,pattern的前後需要用「%」標記,除非搜索的字元串在被收縮的字元串的最前面或最後面。
和charindex函數相同,patindex函數返回搜索字元串在被搜索字元串中的起始位置。假如有這樣一個patindex函數:
patindex(%bc%,abcd)
這個patindex函數返回的結果是2,這和charindex函數相同。這里的%標記告訴patindex函數去找字元串「bc」,不管被搜索的字元串中在「bc」的前後有多少字元!
假如想知道被搜索字元串是否由特定的字元串開始,能夠省去前面的%標記。patinded函數就要這樣寫:
patindex(ab%,abcd)
這個命令執行的結果返回1,表示搜索的字元串「ab」在被搜索的字元串中「abcd」被找到。
使用通配符能夠編輯比以上舉得簡單例子復雜得多的搜索字元串。假如說要確定一個字元串是否包含字母a和z,更有任何數字,這個parindex函數命令可能像這樣:
patindex(%[a,z,0-9]%[a,z,0-9]%[a,z,0-9]%,xyzabc123)
注意在上面這個例子中的搜索字元部分使用了很多的通陪符。察看sql server聯機叢書能夠獲得更多關於通佩符的信息。接下來,用兩個例子來看patindex和select怎麼聯合起來使用。
假設想要找出northwind.dbo.categories表中description欄位中是包含單詞「bread」或「bread」的任何記錄,那麼選擇語句就可能是這樣:
.dbo.categorieswherepatindex(%[b,b]read%,description)>0
這里用通配符來確定大寫和小寫的「b」。在notthwind資料庫中執行這個腳本後,得到下面的結果:
description
--------------------------------------------------------
desserts, candies, and sweet breads
breads, crackers, pasta, and cereal
這是再用另外一個額外的通配符來查找一些記錄的例子。這個例子是怎樣選出上面的查詢結果中,description欄位的第二子字母不是「e」的紀錄。
.dbo.categorieswherepatindex(%[b,b]read%,description)>0andpatindex(_[^e]%,description)=1
通過在條件語句中增加一個使用^通配符的patindex函數,能夠過濾掉「dessert, candies, and sweet breads」這條記錄。上面的查詢結果只有一條記錄。
description
--------------------------------------------------------
breads, crackers, pasta, and cereal
總結
現在能夠發現charindex和patindex搜索字元串時的區分了吧。patindex函數支持使用通配符,能夠用在很多有變化的查找中。而charindex不能夠。根據自己不同的情況,這兩個函數對在sql server中的字元串的搜索、控制、分析很有幫助。
7. SQLserver中字元串查找功能patindex和charindex的區別
patindexh和charindex函數,都可以在一段字元中搜索字元或字元串。
主要區別在:patindex函數支持使用通配符來進行搜索,charindex不支持通配符。
一、patindex函數
語法格式:patindex ( %pattern% , expression )
pattern:是要搜索的字元串
expression:是被搜索的字元串。
patindex函數返回字元或字元串在另一個字元串或表達式中的起始位置。
patindex函數支持搜索字元串中使用通配符,這也是patindexh和charindex函數主要的區別。
例:
patindex(%bc%,abcd) --返回:2
patindex(ab%,abcd) --返回:1
SQL中可以使用的通配符有:
1、%,替代一個或多個字元
2、_,僅替代一個字元
3、[charlist],字元列中的任何單一字元
4、[^charlist]或者[!charlist],不在字元列中的任何單一字元
二、charindex 函數
語法格式:charindex ( expression1 , expression2 [ , start_location ] )
expression1:是在expression2中尋找的字元
start_location:是charindex函數開始在expression2中找expression1的位置
charindex函數返回一個整數,返回的整數是要找的字元串在被找的字元串中的位置。假如charindex沒有找到要找的字元串,那麼函數整數0。
例:
charindex(sql, microsoft sql server) --返回:11
charindex(7.0, microsoft sql server 2000) --返回:0