/ / MySQL Sélection d’une colonne jusqu’à son numéro - php, mysql, sql

MySQL Sélection d'une colonne jusqu'au numéro - php, mysql, sql

En gros, je veux faire une sélection dans une colonne jusqu'à ce qu'il y ait un numéro dans le champ. Par exemple, j'ai des données de code postal qui ressemblent à

+----------+
| postcode |
+----------+
| RG41 5LY |
| RG7 6LO  |
| SW 1AA   |
| M 3BV    |
+----------+

Je veux pouvoir recevoir les premières lettres, par exemple. RG, SW, M. Sélectionnez donc les données jusqu'à ce qu'elles atteignent un caractère non alpha. Je veux le faire pour pouvoir le regrouper par les premiers caractères alpha

Actuellement, ma requête est comme ceci:

    SELECT COUNT(*) as count, postcodeArea FROM Client c
(SELECT UPPER((SUBSTRING_INDEX(postcode, " ", 1))) AS postcodeArea

Il groupe en fonction de la colonne jusqu'au premier espace

Merci!

Réponses:

1 pour la réponse № 1

Supposons que vous avez jusqu'à 3 lettres principales dans vos codes postaux, vous pouvez essayer ceci:

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 pour la réponse № 2

utilisation Regex en Mysql

SELECT COUNT(*) as count, postcodeArea REGEXP /^[A-z]+$/ as postarea_code FROM Client c

0 pour la réponse № 3

J'ai fait quelques recherches et j'ai trouvé qu'il n'y avait aucun moyen d'appliquer l'expression régulière sur SUBSTR_INDEX (). La seule façon d'utiliser l'expression régulière dans la requête SELECT est comme SELECT postcode REGEXP "[^A-Za-z]" as postarea_code FROM client. Cependant, il retourne avec 0 ou 1 pour montrer si la ligne correspond. Dans votre cas, il renverra 1,1,1,1 car toutes les lignes contiennent un caractère non alphabétique. Et cela n'a pas de sens dans votre cas.
Pourriez-vous décrire davantage ce que vous voulez faire? Comme l’a dit @ san1646, pourquoi n’utilisez-vous pas ORDER? Voulez-vous dire que vous voulez grouper RG41 5LY et RG7 6LO ensemble par la lettre R? Dans ce cas, vous pouvez utiliser LEFT(postcode,1) pour obtenir la première lettre.