2017-03-16 16 views
1

SQLでcharindex関数のこの奇妙な動作を教えてもらえますか? 2番目の文字が 'o'の値を検索しています。クエリー1と3が 'OO software ontwerp'を返さない理由を理解できませんが、クエリー4のlike演算子を使用すると表示されます。クエリ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 
charindex()
+0

見つかったので、charindexは検索された文字の最初の位置を返します。 CHARINDEX( 'o'、titel、2)= 2を設定しなければならなかった。私の間違い。 – Kevin

答えて

2

、最初の発生を発見likeマッチパターン、patindex()はまた、パターンにマッチするが、それでも最初に出現したものを返します。 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 | 
+-------------------------------+ 
01あなたは patindex('_o%',titel)=1

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

rextesterデモを使用することができます