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   |
+-------------------------------+
Другие вопросы по тегам