2016-09-08 3 views
0

Мне нужно найти имя, где второй и третий символ являются оо. И последнее имя - не Томелос.Поиск в строке для двух одинаковых символов друг за другом

Я придумал этот запрос

SELECT * FROM student 
WHERE INSTR(naam, 'o') = 2 AND INSTR(naam, 'o') = 3 
AND naam NOT LIKE '%Tomeloos'; 

Но, как ожидается, это не работает, потому что эта часть никогда не возвращает истину:

AND INSTR(naam, 'o') = 3 

Потому что он будет видеть уплотнительным во втором положении.

Кто-нибудь знает, как я могу достичь этого с помощью функции INSTR? Благодаря

ответ

1

Вы можете попробовать

SELECT * FROM student 
WHERE SUBSTR(naam, 2, 2) = 'oo' 
AND naam NOT LIKE '%Tomeloos'; 
1

Вы должны работать с substr

Попробуйте

SELECT * FROM student 
WHERE INSTR(naam, 'o') = 2 AND instr(substr(naam,instr(naam,'o')+1),'o')+instr(naam,'o') = 3 
AND naam NOT LIKE '%Tomeloos'; 
+0

Это работает, спасибо. Но другие ответы более элегантны. И более читаемый. – Bas

1

Хотя в некоторых разновидностях SQL INSTR позволяет указать начальную позицию, это не относится к MySQL. Таким образом, это невозможно с INSTR без предварительного получения подстроки, которая не включает «o» в позиции 2.

Это говорит о том, что LIKE кажется намного лучше подходит для того, чего вы пытаетесь достичь:

WHERE naam LIKE '_oo%' 
+0

Спасибо! Это работает, но ответ, отправленный PaulF, - это то, что он ищет. Поэтому я проголосовал за ваш ответ. – Bas

Смежные вопросы