Ответ 1
select *
from table
where LENGTH(name) - LENGTH(REPLACE(name, 'a', '')) between 1 and 2
Обновлено для использования между.
Примеры слов: a, akkka, akokaa, kokoko, kakao, oooaooa, kkako, kakaoa
Мне нужно, чтобы regexp witch давала слова с 2 или меньше 'a', но не словами без 'a'
Результат: a, akka, kakao, oooaooa, kkako
Хорошо, я использую:
SELECT word FROM dictionary_gr WHERE word REGEXP 'λ{2,3}' LIMIT 0 , 30
это возвращает 0 строк, есть слова с 2 λ и 3 λ
select *
from table
where LENGTH(name) - LENGTH(REPLACE(name, 'a', '')) between 1 and 2
Обновлено для использования между.
Я не знаю, что поддерживает MySQL в терминах поисковых запросов, но следующее будет делать трюк:
^(?=.*a.*a?.*)(?!.*a.*a.*a.*).*$
У нас есть утверждение lookahead, которое соответствует 1 или 2 символам a
в строке. Тогда у нас есть негативный взгляд, который игнорирует 3 или более a
в любом месте строки. Тогда окончательный шаблон просто соответствует всей строке, обеспечивая выполнение первых двух утверждений.
Если MySQL не поддерживает поисковые запросы, тогда ответ @Woot4Moo будет способом.
Быстрая и грязная:
Select word, number_of_as From
(
Select 'akkka' word, REGEXP_COUNT('akkka', 'a') number_of_as From dual
)
Where number_of_as <= 2
/