Как выбрать по диапазону начальных символов? - PullRequest
2 голосов
/ 15 июля 2011

Вот мой запрос MySQL:

SELECT *
FROM `eodList` 
WHERE datechanged>='$curdate' 
GROUP BY symbolName 
ORDER BY dateChanged DESC

Как получить все строки (например), где symbolName начинается с букв A-F?


Обновление:

Мне нужно что-то, что может быть легко изменено на другой диапазон без большого количества изменений кода.

Ответы [ 3 ]

6 голосов
/ 16 июля 2011

Быстрее, чем вызовы функций Regular expressions и SUBSTRING().При этом будет использоваться индекс symbolName:

WHERE symbolName >= 'A' 
  AND symbolName < 'G'

Однако существует проблема с чувствительностью к регистру.Вы хотите, чтобы имена начинались с a..f тоже или нет?

Если вам нужны только имена, которые начинаются с заглавных букв, а таблица имеет набор символов utf8, используйте:

WHERE symbolName >= 'A' COLLATE utf8_bin
  AND symbolName < 'G' COLLATE utf8_bin

Для других наборов символов используйте соответствующее сопоставление _bin.

6 голосов
/ 15 июля 2011

Попробуйте с Regex

WHERE symbolName REGEXP '^[A-F]'
0 голосов
/ 15 июля 2011
SELECT *
FROM `eodList` 
WHERE datechanged>='$curdate' AND


((SUBSTRING(symbolName, 1, 1) >= "A" AND SUBSTRING(symbolName, 1, 1) <="F"))
GROUP BY symbolName 
ORDER BY dateChanged DESC
...