2017-03-16 157 views
1

有人可以解釋我這個charindex函數在SQL中的奇怪行爲嗎?我們正在搜索第二個字母是'o'的值。我不明白爲什麼查詢1和3不會返回'OO software ontwerp',而在查詢4中使用類似的操作符時它會顯示出來。即使當我在查詢5中搜索大寫字母'O'時,'OO software ontwerp'值也不顯示。SQL Charindex與LIKE運算符

DECLARE @T TABLE (Titel VARCHAR(255)) 
INSERT INTO @T VALUES 
('Mobotu'),('OO software ontwerp'),('Compleet handboek Access 97'),('Compleet handboek Access 2000'),('Compleet handboek Access 95') 

查詢1

SELECT titel FROM @T WHERE CHARINDEX('o', titel, 1) = 2 

    titel 
----------------------------- 
1 Mobotu 
2 Compleet handboek Access 97 
3 Compleet handboek Access 2000 
4 Compleet handboek Access 95 

查詢2

SELECT titel FROM @T WHERE CHARINDEX('o', titel, 1) = 1 

    titel 
----------------------------- 
1 OO software ontwerp 

查詢3

SELECT titel FROM @T WHERE CHARINDEX('o', LOWER(titel), 1) = 2 

    titel 
----------------------------- 
1 Mobotu 
2 Compleet handboek Access 97 
3 Compleet handboek Access 2000 
4 Compleet handboek Access 95 

查詢4

SELECT titel FROM @T WHERE titel LIKE '_o%' 

    titel 
----------------------------- 
1 Mobotu 
2 OO software ontwerp 
3 Compleet handboek Access 97 
4 Compleet handboek Access 2000 
5 Compleet handboek Access 95 

查詢5

SELECT titel FROM @T WHERE CHARINDEX('O', titel, 1) = 2 

    titel 
----------------------------- 
1 Mobotu 
2 Compleet handboek Access 97 
3 Compleet handboek Access 2000 
4 Compleet handboek Access 95 
+0

我發現它,charindex返回搜索到的字母的第一個位置。我必須設置WHIN CHARINDEX('o',titel,2)= 2。我的錯誤。 – Kevin

回答

2

charindex()找到的第一個發生,like一個模式匹配,patindex()也匹配的圖案,但仍返回第一次出現。你可以使用patindex('_o%',titel)=1

select titel 
from @t 
where patindex('_o%', titel) = 1 

rextester演示:http://rextester.com/JCHFQT86136

回報

+-------------------------------+ 
|    titel    | 
+-------------------------------+ 
| Mobotu      | 
| OO software ontwerp   | 
| Compleet handboek Access 97 | 
| Compleet handboek Access 2000 | 
| Compleet handboek Access 95 | 
+-------------------------------+ 

select titel 
from @t 
where patindex('%e%', titel) = 6 

回報:

+-------------------------------+ 
|    titel    | 
+-------------------------------+ 
| Compleet handboek Access 97 | 
| Compleet handboek Access 2000 | 
| Compleet handboek Access 95 | 
+-------------------------------+