Postleitzahl vorangestellte Null

Werbung:
Ergänzung

Datentyp ist abgeklärt, offenbar ist das Schlüsselwort strict an den Beteiligten vorbei gelaufen.

Code:
create table adr1(plz INT);
insert into adr1 values ('3'), (1), (2), (4), ("A");
select typeof(plz) as type, plz from adr1 order by plz;


-- | type    | plz |
-- | ------- | --- |
-- | integer |  1  |
-- | integer |  2  |
-- | integer |  3  |
-- | integer |  4  |
-- | text    |  A  |

Strict Mode

Code:
create table adr1(plz INT) strict;
insert into adr1 values ('3'), (1), (2), (4), ("A");
select typeof(plz) as type, plz from adr1 order by plz;

-- exception number   : 13
-- exception class    : ESQLiteException
-- exception message  : cannot store TEXT value in INT column adr1.plz SQL Statement:
-- insert into adr1 values ('3'), (1), (2), (4), ("A");.

Der Typ eines Feldes lässt sich schon ändern, das ist weniger empfehlenswert, weil man sich hierbei auch mal schnell die Datenbank zerschießt. Hier tendiere ich eher dazu eine neue Tabelle anzulegen, die Werte zu kopieren und die alte Tabelle zu löschen.

Trotzdem ein Beispiel, wie man den Typ ändert:

Code:
pragma writable_schema = 1;
update sqlite_master set sql = replace(sql, 'plz INT', 'plz TEXT') where tbl_name='adr1';

Wie gesagt, eine gefährliche Lösung.

Die Aussage "der kleine Fußabdruck hat seinen Preis" muss man relativieren. Ich bin schon ziemlich lange im Geschäft und habe die Erfahrung gemacht, dass die meisten täglichen Anforderungen mit SQLite abgedeckt werden können.

Wenn ich sehe, dass für MiniPräsenzen (MiniHotels, Pensionen, Kneipen, Handwerksbetriebe etc.) MariaDB, MySql oder gar PostgreSQL angeschmissen wird, ist das für mich ebenso überzogen, wie der Wahn, mit einen Q8 durch Köln zu fahren.

Man sollte sich durchaus mal mit SQLite auseinandersetzen, der Traum täglich tausende Bestelleingänge oder Websitenutzer zu haben, wird selten Realität. Wenn einem dieses Glück hold ist, kann man immer noch schnell und problemfrei von SQLite auf andere DB´s umsatteln.
 
Man sollte sich durchaus mal mit SQLite auseinandersetzen,
Ja, Du hast Recht. Der "Preis" von dem ich sprach, ist ja auch nicht exorbitant.
Ich finde einfach, es ist nicht der leichteste/beste Einstieg für Anfänger, wenn man an solche Ecken kommt. Es gibt seit Jahrzehnten Standardbefehle zum Ändern von Tabellen.

Und diese "Basteleien" ala "mach mal hier irgendein finsteres, proprietäres Kommando und dann da, aber nur bei Vollmond und vielleicht klappt das auch in der Version nicht, die Du laufen hast, .. ", die kann man alle machen, wenn man halbwegs einen Plan hat oder Langeweile oder grad erst 16 ist. Man kann auch Automechaniker bei Citroen am 2CV lernen. Man lernt dann einfach etwas relativ spezifisches, was dennoch dem Prinzip Verbrennungsmotor, Reifen, Kupplung, Bremse und selbsttragende Karosserie folgt. Man muss sich halt darüber im Klaren sein, dass es einem bei einem anderen Fahrzeug nicht viel weiter hilft.

Und manchmal bin ich auch positiv überrascht von SQLite. Bestimmte Funktionen tauchen da eher oder besser auf, als bei anderen, "großen" Systemen.
 
Da "alter column type" nicht zu meinem täglich genutzten Anweisungen gehört, kann ich mit den diesbezüglichen SQLite Einschränkungen leben.

Diese Einschränkungen sind dokumentiert unter ALTER TABLE.

Was Du als Bastelei bezeichnest, ist eine simple Änderung des Datenbankschemas, hier muss man halt wissen, was man treibt. Das hat nichts mit Vollmond oder Pubertät zu tun, sondern ist der Architektur von SQLite geschuldet.

Wo bei PostgreSQL ein simples SERIAL PRIMARY KEY reicht, muss bspw. bei MySQL ein INT AUTO_INCREMENT PRIMARY KEY herhalten usw. Man muss sich immer mit dem gerade genutzten System auseinandersetzen.

Ist es nicht bedenklich, Lösungen nach dem Bedenkenträgermuster "ja aber, wenn... und dann könnte" zu suchen. Das gipfelte zuletzt darin, dass ich bei der Überarbeitung einer Verwaltungswebseite auf die Installation einer Datenbank traf, deren Wartung jährlich ganz gut abgerechnet wurde - wofür ? Für die Verwaltung von 14 PDF-Flyern, die insgesamt etwa 100 mal im Jahr heruntergeladen wurden.

Ebenso können wir getrost davon ausgehen, dass der TE für sein Mitgliederliste kein PostgreSQL benötigt. Deswegen ist die PostgreSQL Empfehlung überzogen. Der TE hat das Thema mit SQLite angemessen angepackt, das muss man ihm nicht ausreden...
 
Um die Ganzzahlen innerhalb der gleichen Tabelle zu konvertieren kannst Du die printf Funktion verwenden:

UPDATE t SET PLZ = cast(printf('%010i' , PLZ) AS TEXT)
 
Werbung:
Zurück
Oben