SQLserver中字符串查找功效patindex和charindex的差別。本站提示廣大學習愛好者:(SQLserver中字符串查找功效patindex和charindex的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLserver中字符串查找功效patindex和charindex的差別正文
比來常常應用字符串查找功效。
包含
1、全婚配查找字符串
2、隱約查找字符串
CHARINDEX 和 PATINDEX 函數都前往指定形式的開端地位。PATINDEX 可以使用通配符,而 CHARINDEX 弗成以。
這兩個函數都帶有2個參數:
1 願望獲得其地位的形式。應用 PATINDEX,形式是可以包括通配符的字面字符串。應用 CHARINDEX,形式是字面字符串(不克不及包括通配符)。
2 字符串值表達式(平日為列名)。
例如,查找形式"wonderful"在 titles 表中 notes 列的某一特定行中的開端地位。
USE pubs
SELECT CHARINDEX('wonderful', notes)
FROM titles
WHERE title_id = 'TC3218'
例如,應用通配符查找形式"candies"在 Categories 表中的 Description 列的任一行中的開端地位:
USE Northwind
GO
SELECT CategoryID, PATINDEX('%candies%', Description)AS POSITION
FROM Categories
WHERE PATINDEX('%candies%', Description) <> 0
願望對年夜家有效。
假如下面依然沒看懂的,可以持續往下看:
1、[SQL] patindex 詳解 [Z]
PATINDEX
前往指定表達式中某形式第一次湧現的肇端地位;假如在全體有用的文本和字符數據類型中沒有找到該形式,則前往零。
語法
PATINDEX ( "%pattern%" , e-xpression )
參數
pattern
一個字符串。可使用通配符,但 pattern 之前和以後必需有 % 字符(搜刮第一個和最初一個字符時除外)。pattern 是短字符數據類型種別的表達式。
e-xpression
一個表達式,平日為要在個中搜刮指定形式的列,e-xpression 為字符串數據類型種別。
前往類型
int
正文
PATINDEX 對 text 數據類型很有效;除 IS NULL、IS NOT NULL 和 LIKE(這些是 Where 子句中對 text 類型有用的唯一的其它比擬運算)外,PATINDEX 也可用於 Where 子句中。
-----------------------------------------
例一:
找出Northwind.dbo.Categories表中Description字段中是包括單詞“Bread”或“bread”的一切記載,那末選擇語句便可能是如許:
Select Description from Northwind.dbo.Categories
Where patindex("%[b,B]read%",description) > 0
PATINDEX 中可使用通配符來肯定年夜寫和小寫的“b”
例二:
找出Northwind.dbo.Categories表中Description字段中是包括單詞“Bread”或“bread”,且第二子字母不是“e”的記載。
select Description from Northwind.dbo.Categories
where patindex("%[b,B]read%",description) > 0 and patindex("_[^e]%",description) = 1
經由過程在前提語句中增長一個應用^通配符的PATINDEX函數,我們可以過濾失落“Dessert, candies, and sweet breads”這筆記錄。下面的查詢成果只要一筆記錄。
PATINDEX與CHARINDEX
PATINDEX函數支撐應用通配符,可以用在許多有變更的查找中。而CHARINDEX弗成以。依據你本身分歧的情形,這兩個函數對你在SQL Server中的字符串的搜刮、掌握、剖析很有贊助。
2、SQL Server CHARINDEX和PATINDEX詳解
假設你寫過許多法式,你能夠偶然會碰著要肯定字符或字符竄串否包括在一段文字中,在這篇文章中,我將評論辯論應用CHARINDEX和PATINDEX函數來 搜刮文字列和字符串。我將告知你這兩個函數是若何運轉的,說明他們的差別。同時供給一些例子,經由過程這些例子,你可以可以斟酌應用這兩個函數來處理許多分歧 的字符搜刮的成績。
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的記載!
select top 5 substring(ContactName,charindex(" ",ContactName)+1 ,
len(ContactName)) as [Last Name] from Northwind.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的記載數,選擇語句相似如許:
SELECT count(*) from Northwind.dbo.Customers
WHERE CHARINDEX("Rd",Address) > 0 or CHARINDEX("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”的一切記載,那末選擇語句便可能是如許:
SELECT Description from Northwind.dbo.Categories
WHERE patindex("%[b,B]read%",description) > 0
這裡我用通配符來肯定年夜寫和小寫的“b”。我在Notthwind數據庫中履行這個劇本後,獲得上面的成果:
Description
--------------------------------------------------------
Desserts, candies, and sweet breads
Breads, crackers, pasta, and cereal
這是再用別的一個額定的通配符來查找一些記載的例子。這個例子是若何選出下面的查詢成果中,Description字段的第二子字母不是“e”的記載。
select Description from Northwind.dbo.Categories
where patindex("%[b,B]read%",description) > 0
and patindex("_[^e]%",description) = 1
經由過程在前提語句中增長一個應用^通配符的PATINDEX函數,我們可以過濾失落“Dessert, candies, and sweet breads”這筆記錄。下面的查詢成果只要一筆記錄。
Description
--------------------------------------------------------
Breads, crackers, pasta, and cereal
總結
你如今可以發明CHARINDEX和PATINDEX搜刮字符串時的差別了吧。PATINDEX函數支撐應用通配符,可以用在許多有變更的查找中。而 CHARINDEX弗成以。依據你本身分歧的情形,這兩個函數對你在SQL Server中的字符串的搜刮、掌握、剖析很有贊助。