定義
charIndex(被搜尋的字元串,接受搜尋的字元串[,起始])
返回字元串中指定表達式的起始位置。
相關知識
語法
CHARINDEX ( expression1 , expression2 , [ start_location ] )
參數
expression1
一個表達式,其中包含要尋找的字元的次序。 expression1 是一個短字元數據類型分類的表達式。
expression2
一個表達式,通常是一個用於搜尋指定序列的列。 expression2 屬於字元串數據類型分類。
start_location
在 expression2 中搜尋 expression1 時的起始字元位置。如果沒有給定 start_location,而是一個負數或零,則將從 expression2 的起始位置開始搜尋。
返回類型
int
注釋
如果 expression1 或 expression2 之一屬於 Unicode 數據類型(nvarchar 或nchar)而另一個不屬於,則將另一個轉換為 Unicode數據類型。
如果 expression1 或 expression2 之一為NULL 值,則當資料庫兼容級別為 70 或更大時,CHARINDEX 返回 NULL 值。當資料庫兼容級別為 65 或更小時,CHARINDEX 僅在 expression1 和 expression2 都為 NULL 時返回 NULL 值。
如果在 expression2 內沒有找到 expression1,則 CHARINDEX 返回 0。
類似與C#中的StartWith(),IndexWith()等函式。
例子
例一:
CustomName包含客戶的First Name和Last Name,它們之間被一個空格隔開。我們用CHARINDX函式確定兩個名字中間空格的位置。通過這個方法,我們可以分析ContactName列的空格位置,這樣可以只顯示這個列的last name部分。
select top 5 substring(ContactName,charindex(' ',ContactName)+1,len(ContactName)) as [Last Name] from customers
CHARINDEX函式找到First Name和Last Name之間的空格,所以SUBSTRING函式可以分開ContactName列,這樣就只有Last Name被選出。在CHARINDEX函式返回的整數上加1,這樣Last Name不是從空格開始。
例二:
計算Northwind.dbo.Customer表中Addresses欄位中包含單詞Road或者它的縮寫Rd的記錄數,選擇語句類似這樣:
select count(*) from Northwind.dbo.Customers where CHARINDEX('Rd',Address) > 0 or CHARINDEX('Road',Address)> 0
例三:
print charindex--------判斷第一個字元串是否在第二個字元串中存在,如果存在:返回第一個字元串的第一個字元在第二個字元串中的下標,不存在返回0)
print charindex('abc','dfsaabc')--存在所以返回值為5(abc中的a在dfsaabc里的下標)
局限性
charindex為SQL Server函式,Oracle中使用函式instr