/ / MySQL Auswahl einer Spalte bis zur Nummer - PHP, MySQL, SQL

MySQL Auswahl einer Spalte bis zur Nummer - php, mysql, sql

Grundsätzlich möchte ich aus einer Spalte auswählen, bis sich eine Nummer im Feld befindet. Zum Beispiel habe ich PLZ-Daten, die so aussehen

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

Ich möchte in der Lage sein, nur die ersten Buchstaben zu erhalten, z. RG, SW, M. Wählen Sie also die Daten aus, bis sie ein Nicht-Alpha-Zeichen erreichen. Ich möchte dies tun, damit ich es nach den ersten Buchstaben gruppieren kann

Momentan sieht meine Anfrage so aus:

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

Es gruppiert sich basierend auf der Spalte bis zum ersten Leerzeichen

Vielen Dank!

Antworten:

1 für die Antwort № 1

Angenommen, Sie haben bis zu 3 führende Buchstaben in Ihren Postleitzahlen. Versuchen Sie Folgendes:

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 für die Antwort № 2

benutzen Regex in MySQL

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

0 für die Antwort № 3

Ich habe einige Nachforschungen angestellt und festgestellt, dass es keine Möglichkeit gibt, Regex auf SUBSTR_INDEX () anzuwenden. Die einzige Möglichkeit, reguläre Ausdrücke in SELECT-Abfragen zu verwenden, ist wie folgt SELECT postcode REGEXP "[^A-Za-z]" as postarea_code FROM client. Es wird jedoch mit 0 oder 1 zurückgegeben, um anzuzeigen, ob die Zeile übereinstimmt. In Ihrem Fall wird 1,1,1,1 zurückgegeben, da alle Zeilen ein nicht-alphabetisches Zeichen enthalten. Und das ergibt in Ihrem Fall keinen Sinn.
Könnten Sie mehr darüber erzählen, was Sie tun möchten? Wie @ san1646 sagte, warum nicht Sie verwenden ORDER? Meinen Sie, Sie möchten gruppieren RG41 5LY und RG7 6LO zusammen mit Buchstabe R? In diesem Fall können Sie verwenden LEFT(postcode,1) den ersten Brief bekommen.