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 № 1Angenommen, 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.