Мне нужно найти имя, в котором второй и третий символы - oo. И фамилия не Томелоос.

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

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

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

AND INSTR(naam, 'o') = 3

Потому что во второй позиции будет отображаться o.

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

0
Bas 8 Сен 2016 в 15:27

3 ответа

Лучший ответ

Вы могли бы попробовать

SELECT * FROM student
WHERE SUBSTR(naam, 2, 2) = 'oo'
AND naam NOT LIKE '%Tomeloos';
1
PaulF 8 Сен 2016 в 12:48

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

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

WHERE naam LIKE '_oo%'
1
Scepheo 8 Сен 2016 в 12:37

Вы должны работать с 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';
1
sh88 8 Сен 2016 в 12:36