По принцип искам да избера от колона, докато в полето няма номер. Например имам данни за пощенски код, който изглежда така
+----------+
| 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
Той се групира въз основа на колоната до първото пространство
Благодаря!
Отговори:
1 за отговор № 1Да приемем, че имате до 3 водещи букви в пощенските си кодове, можете да опитате това:
SELECT COUNT(*) tot, pcode FROM (
SELECT CASE
WHEN postcodearea REGEXP "^[A-Z][A-Z][A-Z].*" THEN SUBSTRING(postcodearea,1,3)
WHEN postcodearea REGEXP "^[A-Z][A-Z].*" THEN SUBSTRING(postcodearea,1,2)
WHEN postcodearea REGEXP "^[A-Z].*" THEN SUBSTRING(postcodearea,1,1)
ELSE "" END AS pcode
FROM client
) e
GROUP BY pcode
0 за отговор № 2
употреба Регекс в Mysql
SELECT COUNT(*) as count, postcodeArea REGEXP /^[A-z]+$/ as postarea_code FROM Client c
0 за отговор № 3
Направих някои изследвания и установих, че няма начин да се приложи регекс на 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)
за да получите първото писмо.