2017-03-16 6 views
1

누군가가 SQL에서 charindex 함수의이 이상한 동작을 설명해 주시겠습니까? 우리는 두 번째 문자가 'o'인 값을 검색합니다. 질문 1과 3이 'OO 소프트웨어 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

0,123,989,566,

쿼리 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는 검색된 문자의 첫 번째 위치를 반환합니다. CHARINDEX ('o', titel, 2) = 2로 설정해야했습니다. 실수였습니다. – Kevin

답변

2

charindex() 첫 번째 발생을 발견, likepatindex()도 패턴과 일치, 패턴과 일치하지만, 여전히 첫 번째 항목을 반환합니다. 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 데모를 사용할 수 있습니다