Postleitzahl vorangestellte Null

Schleifchen

Benutzer
Beiträge
6
Hallo in die Runde, ich versuche mich grad als Unerfahrener am DB Browser.
In der Tabelle MIGL existiert die Spalte PLZ. Beim Datenimport aus *.txt wurde ihr automatisch der Typ "INTEGER" zugewiesen. Als Folge wurden die führenden Nullen gelöscht.
Nun habe ich den Datentyp dieser Spalte auf TEXT umgestellt, gepeichert und anschließend per UPDATE geändert:
SQL:
UPDATE MITGL
    set PLZ = 01234
    where PLZ = 1234;
SELECT * from MITGL;
die Ausführung wird auch ohne Fehler beendet, aber
SQL:
SELECT * FROM MITGL;
zeigt, das doch keine 0 vorangestellt wurde.
Was habe ich übersehen?

Danke für jede Hilfe...
Stefan
 
Werbung:
Code:
postgres=# create table schleifchen(plz int);
CREATE TABLE
postgres=# insert into schleifchen values (01234);
INSERT 0 1
postgres=# select * from schleifchen ;
 plz  
------
 1234
(1 row)
postgres=# alter table schleifchen alter column plz type text using plz::text;
ALTER TABLE
postgres=# update schleifchen set plz = '0' || plz where length(plz) = 4;
UPDATE 1
postgres=# select * from schleifchen ;
  plz  
-------
 01234
(1 row)

postgres=#
 
Was habe ich übersehen?
Wenn Du einen Text angeben musst, dann in einfachen Hochkomma.
Da Zahlen werden in SQL implizit nach Text konvertiert, wenn sie einer Textspalte zugewiesen werden. Dies geschieht vor der Werteübergabe an die Textspalte, 1234 und 01234 sind beim Absetzen des Statement für die DB engine vollkommen identische Zahlen. '1234' und '01234' sind dagegen unterschiedliche Texte, und zwar in diesem Fall ohne Konvertierung, Wert-Typ und Spalten-Typ stimmen von Anfang an überein.
 
Hallo und danke :)
@ dabadepdu: beim zweiten Importversuch aus *.csv habe ich die Option "Datentypen automatisch erkennen" im DB Browser abgehakt - das hat geholfen. Und nach dem Import den Spalten die Datentypen zugewiesen.

@akretschmer : im DB Browser die Datenbank öffnen, unter "Datenbankstruktur" den Typ der Spalte von INTEGER zu TEXT ändern solle doch richtig sein? Die Änderung per

Code:
ALTER TABLE MITGL
ALTER COLUMN PLZ;

erzeugte einen Fehler...
 
Aja, hatte leider nur unvollständig geschrieben:
Code:
ALTER TABLE MITGL
ALTER COLUMN PLZ TEXT;
der Datentyp der Spalte PLZ soll von INTEGER zu TEXT geändert werden.

Die Fehlermeldung:
Ausführung wurde mit Fehlern beendet.
Ergebnis: near "ALTER": syntax error
In Zeile 1:
ALTER TABLE MITGL
ALTER

Wie muss die Anweisung richtig formuliert werden?

Danke!
 
Code:
postgres=# create table mitgl(plz integer);
CREATE TABLE
postgres=# alter table mitgl alter column plz type text;
ALTER TABLE
postgres=# insert into mitgl(plz) values ('3012');
INSERT 0 1
postgres=# select * from mitgl;
 plz
------
 3012

ist aber nur sehr begrenzt zu empfehlen, weil eine PLZ im Normalfall immer ein Integer ist..
 
oh, für den Code brauch ich noch etwas Zeit. Ich verwende SQlite, der Code gibt 1:1 angewendet einen Fehler. Da muss ich wohl noch bisschen Grundlagen wälzen :)
ist aber nur sehr begrenzt zu empfehlen, weil eine PLZ im Normalfall immer ein Integer ist..
aber wie werden dann vorangestellte Nullen dargestellt? Ist das per Formatierung möglich?
 
... na wenn die Profis an der Stelle uneins sind ....😁
eine andere Frage: gibt es irdenwo in den Weiten des Internets eine Seite die für Laien, welche die Syntax für SQLite erläutert. Wie liegen Eure Erfahrungen?
Zur Anweisung ALTER hab ich recht viel gefunden, aber nix was den Datentyp ändert und funktioniert...

Danke Stefan
 
Zur Anweisung ALTER hab ich recht viel gefunden, aber nix was den Datentyp ändert und funktioniert...
... und wenn man dann die Doku gefunden hat sieht man: SQLite supports a limited subset of ALTER TABLE. The ALTER TABLE command in SQLite allows these alterations of an existing table: it can be renamed; a column can be renamed; a column can be added to it; or a column can be dropped from it.

Tja, Typ ändern ist zu kompliziert für sqlite ... andere DB und deren Doku: ALTER TABLE
 
Werbung:
wenn die Profis an der Stelle uneins sind

Was das Thema Datentyp bei PLZ angeht, kann es keine Uneinigkeit geben. Deswegen hast Du ja diesen Thread eröffnet. PLZ gehört wie schon mehrfach geschrieben in eine Spalte mit alphanumerischem Datentyp.

Was SQLite und seine Typen angeht und die Möglichkeit, sie zu ändern:
SQLite verhält sich bei Datentypen sehr speziell und dieses Verhalten ist für Anfänger nicht gut, ein Verständnis für die Problematik zu entwickeln.
Das nennen sie Typaffinität. Der DB ist der Typ dabei "egal". "Egal" ist wiederum relativ, weil Dinge passieren, die der DB egal sind, dem Anwender / Entwickler jedoch nicht.

In der Praxis bedeutet es, dass man SQLite dazu bringen kann, einen Text in eine Zahlenspalte zu schreiben, allerdings mit "tödlichen" Seiteneffekten. Was Du in die Spalte reinschreibst, kommt fallweise bei der Abfrage anders wieder. Das willst Du mit Sicherheit nicht!

Zum Lernen ist das nichts. Das kleine, nette SQLite muss man als Spezialsoftware bezeichnen. Der kleine Fußabdruck hat seinen Preis. Nimm lieber Postgres.
 
Zurück
Oben