/ / MySQL Избор на колона до номер - php, mysql, sql

MySQL Избиране на колона до номер - php, mysql, sql

По принцип искам да избера от колона, докато в полето няма номер. Например имам данни за пощенски код, който изглежда така

+----------+
| 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) за да получите първото писмо.