Kennnummer aufteilen

schmitz2606

Benutzer
Beiträge
7
Hallo zusammen,

ich habe folgenden Problem:

In meiner DB habe ich eine Spalte in der eine Kennnummer aufgelistet wird. Diese ist 16-stellig und jeweils 4 Stellen beschreiben einen Parameter.
Zum Beispiel:
1234567890123456 (erster vier Zahlen Art des Bauwerks, zweiten vier Zahlen Landkreis, dritte vier Zahlen Ort, vierte vier Zahlen fortlaufende Nummerierung)

Da User in der Anwendung mit diesen Kennnummern Mist gebaut haben, möchte ich mir diese in vier Spalten ausgeben lassen, um gewisse Dinge zu kontrollieren.
Im Endeffekt möchte ich die 16-stellige Nummer in jeweils 4er Blöcke teilen.
Habe dazu bis jetzt nirgends etwas gefunden, da die meisten Threads zu Strings splitten sind.

Könnt ihr mir da evtl weiterhelfen?
 
Werbung:
Code:
postgres=# create table schmitz2606(kennnummer text);
CREATE TABLE
postgres=# insert into schmitz2606 values ('1234567890123456');
INSERT 0 1
postgres=# select substring(kennnummer,1,4) as art, substring(kennnummer,5,8) as landkreis from schmitz2606 ;
 art  | landkreis 
------+-----------
 1234 | 56789012
(1 row)

postgres=#

Die Anpassung an M$SQL und die Erweiterung für Ort und laufende Nummer überlasse ich Dir zur Übung.
 
Danke für die schnelle Rückmeldung.
Das löst allerdings nicht mein Problem, da ich ja nicht nur die eine Kennnummer hab, sondern ein Liste mit Kennnummern. Diese sind individuell und mir sind die Werte an den Punkten, an denen ich splitten möchte nicht immer bekannt bzw. bräuchte ich ein generelles Statement, dass beliebige 16-stelleige Nummern in 4 Teile teilt.

(Es kann auch sein, dass es in deiner Lösung enthalten ist und ich es einfach nicht sehe)
 
@schmitz2606 Probier doch sein Beispiel einmal aus. Sein Beispiel funktioniert für beliebige Strings, denn mit substring wird ein Teil eines Strings geliefert. Schau doch einfach mal im Handbuch/Webseite nach was substring bedeutet.
 
MSSQL meckert ggf. wenn der String nicht lang genug ist. Du kannst deine Abfrage aber mit WHERE einschränken oder mit CASE die Ausgabe anpassen.
Code:
SELECT substring(spalte,1,4),substring(spalte,5,4),substring(spalte,9,4),substring(spalte,13,4)
FROM tabelle
WHERE len(spalte) = 16
Code:
SELECT (CASE WHEN len(spalte) = 16 THEN substring(spalte,1,4) ELSE NULL END) AS art_des_bauwerks,
...
FROM tabelle
 
Werbung:
Ok hab es hinbekommen, habe mir Dokumentation zu substring angeschaut.
Dacht im Lösungsansatz von @akretschmer wären die Werte direkt angesprochen, allerdings sind es ja die Positionen.

Danke euch allen für die Hilfe.
 
Zurück
Oben