Чувствительный к регистру RLIKE - PullRequest
12 голосов
/ 01 июля 2010

Рассмотрим таблицу datatbl, например:

+----------+
| strfield |
+----------+
|    abcde |
|    fgHIJ |
|    KLmno |
+----------+

Я хочу написать запрос примерно так:

select * from datatbl where strfield rlike '[a-z]*';

Как и в регулярном выражении, отличном от SQL, я хотел бы вернуть строку с * / 1008 *, но не строки с прописными буквами Я не могу найти легкий способ сделать это. Я что-то упустил глупо?

Спасибо, Джо

Ответы [ 2 ]

20 голосов
/ 01 июля 2010

MySQL REGEXP / RLIKE отстой для этого - вам нужно привести данные как BINARY для поиска с учетом регистра:

SELECT * 
  FROM datatbl 
 WHERE CAST(strfield  AS BINARY) rlike '[a-z]*';

Вы найдете это в комментариях для документации REGEXP / RLIKE .

0 голосов
/ 06 ноября 2018

MySQL 5.x

Вы можете обойти его, используя функцию LOWER().

SELECT * 
FROM datatbl 
WHERE LOWER(strfield) RLIKE '[a-z]*';

MySQL 8 +

Есливы используете MySQL 8 + , вы также можете использовать без учета регистра в функции REGEXP_LIKE().

SELECT * 
FROM datatbl 
WHERE REGEXP_LIKE(strfield, '[a-z]*', 'i');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...