Мне нужно найти имя, в котором второй и третий символы - 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
? Благодарность
3 ответа
Вы могли бы попробовать
SELECT * FROM student
WHERE SUBSTR(naam, 2, 2) = 'oo'
AND naam NOT LIKE '%Tomeloos';
Хотя в некоторых вариантах SQL INSTR
позволяет указывать начальную позицию, это не относится к MySQL. Таким образом, это невозможно с INSTR
без предварительного получения подстроки, которая не включает 'o' в позиции 2.
Тем не менее, LIKE
кажется намного лучше подходит для того, чего вы пытаетесь достичь:
WHERE naam LIKE '_oo%'
Вы должны работать с 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';
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.