В основном я хочу выбрать из столбца, пока в поле не будет числа. Например, у меня есть данные почтового индекса, которые выглядят как
+----------+ | postcode | +----------+ | RG41 5LY | | RG7 6LO | | SW 1AA | | M 3BV | +----------+
Я хочу иметь возможность просто получить первые буквы, например, RG, SW, M. Поэтому выберите данные, пока не достигнет символа, отличного от альфы. Я хочу сделать это, чтобы я мог сгруппировать его по первым альфа-символам
В настоящее время мой запрос выглядит так:
SELECT COUNT(*) as count, postcodeArea FROM Client c (SELECT UPPER((SUBSTRING_INDEX(postcode, ' ', 1))) AS postcodeArea
Он группируется на основе столбца до первого пространства
Благодаря!
Предположим, что у вас есть до 3 ведущих букв в ваших почтовых кодах, вы можете попробовать следующее:
SELECT COUNT(*) tot, pcode FROM ( SELECT CASE WHEN postcodearea REGEXP '^[AZ][AZ][AZ].*' THEN SUBSTRING(postcodearea,1,3) WHEN postcodearea REGEXP '^[AZ][AZ].*' THEN SUBSTRING(postcodearea,1,2) WHEN postcodearea REGEXP '^[AZ].*' THEN SUBSTRING(postcodearea,1,1) ELSE '' END AS pcode FROM client ) e GROUP BY pcode
использовать Regex в Mysql
SELECT COUNT(*) as count, postcodeArea REGEXP /^[Az]+$/ as postarea_code FROM Client c
Я провел некоторое исследование и обнаружил, что не существует способа применить регулярное выражение на SUBSTR_INDEX (). Только способ использования регулярного выражения в запросе SELECT похож на SELECT postcode REGEXP '[^A-Za-z]' as postarea_code FROM client
. Однако он возвращает с 0 или 1, чтобы показать соответствие строки. В вашем случае он вернет 1,1,1,1, потому что все строки содержат неалфавитный символ. И это не имеет смысла в вашем случае.
Не могли бы вы подробнее рассказать о том, что вы хотите сделать? Как сказал @ san1646, почему бы вам не использовать ORDER
? Вы хотите, чтобы вы группировали RG41 5LY
и RG7 6LO
вместе буквой R? В этом случае вы можете использовать LEFT(postcode,1)
чтобы получить первую букву.