Выбор всех строк из базы данных, которые начинаются со строчной буквы


Я пытаюсь выбрать все строки в своей базе данных, которые начинаются со строчной буквы с регулярным выражением, но по какой-то причине он также выбирает все строки, которые начинаются с прописной буквы. Что я делаю не так?

SELECT * 
FROM  `allData` 
WHERE response REGEXP  '^[a-z]'
LIMIT 0 , 30
Author: frosty, 2016-06-16

4 answers

Из Руководства по РЕГУЛЯРНОМУ выражению MySQL:

РЕГУЛЯРНОЕ выражение не чувствительно к регистру, за исключением случаев, когда оно используется с двоичными строками.

Вы можете поэтому иметь некоторую удачу при использовании двоичной строки вместо:

WHERE response REGEXP BINARY '^[a-z]'

Достаточно глупая скрипка для демонстрации: http://sqlfiddle.com /#!9/7эд/3

РЕДАКТИРОВАТЬ: Как говорит Рэй в комментариях, вам, вероятно, следует использовать [[:lower:]] вместо этого, чтобы работать со всеми параметрами сортировки, например

WHERE response REGEXP BINARY '^[[:lower:]]'
 11
Author: slugonamission, 2016-06-16 20:58:08

Я бы использовал имя класса символов mysql для сопоставления в сочетании с REGEXP BINARY :

  WHERE response REGEXP BINARY  '^[[:lower:]]'

Я не знаю, имеет ли [a-z] смысл в каждом наборе символов и параметрах сортировки, где в качестве имени класса символов [:lower:] всегда будут совпадать все строчные буквенные символы.

 2
Author: Ray, 2016-06-16 20:56:15
SELECT *
FROM allData
WHERE LOWER(LEFT(response, 1)) <> LEFT(response, 1)
LIMIT 0 , 30

...однако это может быть ограничено вашими параметрами сортировки символов MySQL

 1
Author: Tony Chiboucas, 2017-05-23 12:22:31
select * from alldata where lower(left(response,1)) COLLATE Latin1_General_CS_AS =left(response,1) and response is not null and response<>''
 0
Author: Karthick Gunasekaran, 2016-07-12 12:08:19