Выбор всех строк из базы данных, которые начинаются со строчной буквы
Я пытаюсь выбрать все строки в своей базе данных, которые начинаются со строчной буквы с регулярным выражением, но по какой-то причине он также выбирает все строки, которые начинаются с прописной буквы. Что я делаю не так?
SELECT *
FROM `allData`
WHERE response REGEXP '^[a-z]'
LIMIT 0 , 30
4 answers
Из Руководства по РЕГУЛЯРНОМУ выражению MySQL:
РЕГУЛЯРНОЕ выражение не чувствительно к регистру, за исключением случаев, когда оно используется с двоичными строками.
Вы можете поэтому иметь некоторую удачу при использовании двоичной строки вместо:
WHERE response REGEXP BINARY '^[a-z]'
Достаточно глупая скрипка для демонстрации: http://sqlfiddle.com /#!9/7эд/3
РЕДАКТИРОВАТЬ: Как говорит Рэй в комментариях, вам, вероятно, следует использовать [[:lower:]]
вместо этого, чтобы работать со всеми параметрами сортировки, например
WHERE response REGEXP BINARY '^[[:lower:]]'
Я бы использовал имя класса символов mysql для сопоставления в сочетании с REGEXP BINARY
:
WHERE response REGEXP BINARY '^[[:lower:]]'
Я не знаю, имеет ли [a-z]
смысл в каждом наборе символов и параметрах сортировки, где в качестве имени класса символов [:lower:]
всегда будут совпадать все строчные буквенные символы.
SELECT *
FROM allData
WHERE LOWER(LEFT(response, 1)) <> LEFT(response, 1)
LIMIT 0 , 30
...однако это может быть ограничено вашими параметрами сортировки символов MySQL
select * from alldata where lower(left(response,1)) COLLATE Latin1_General_CS_AS =left(response,1) and response is not null and response<>''