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