SQL Charindex против оператора LIKE
Может кто-нибудь объяснить мне это странное поведение функции charindex в SQL? Мы ищем значения, где вторая буква - "о". Я не понимаю, почему запросы 1 и 3 не возвращают 'OO software ontwerp', хотя при использовании оператора like в запросе 4 он отображается. Даже когда я ищу заглавную букву "O" в запросе 5, значение "OO software ontwerp" не отображается.
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
1 ответ
charindex()
находит первое вхождение, like
соответствует шаблону, patindex()
также соответствует шаблону, но все еще возвращает первое вхождение. Вы могли бы использовать patindex('_o%',titel)=1
select titel
from @t
where patindex('_o%', titel) = 1
демонстрационный ролик: 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 |
+-------------------------------+