SQL-Query: erstes Zeichen eines Strings in Tabellenfeld ändern falls Buchstabe

Fragen und Probleme rund um die Abfragespache SQL.

SQL-Query: erstes Zeichen eines Strings in Tabellenfeld ändern falls Buchstabe

Beitragvon spirit » Mi 9. Mär 2011, 23:52

Hallo,

ich habe eine Tabelle mit einer Spalte, die Strings (PostgreSQL Typ character varying) enthält. Diese Strings muss ich mit einem Query so ändern, dass der erste Character entfernt wird. Die Tabellenspalte sieht z.B. so aus:

Code: Alles auswählen
A123
A6435
A345
B123
B33233
B321
Und nach dem Query sollte sie folgendermaßen aussehen:

Code: Alles auswählen
123
6435
345
123
33233
321
Der Datentyp soll nicht geändert werden (ich möchte also nicht, dass das danach Daten vom Typ Integer sind, das ist nicht nötig).

Ich habe auch schonmal Google bemüht und dabei das hier gefunden. Nach etwas Recherche für postgresql sieht mein Query jetzt also von der Shell aus so aus:

Code: Alles auswählen
psql -U <user> -d <database> -c "UPDATE <table> SET <field> = substr(<field>, 2, char_length(<field>));"
Noch schöner wäre es, wenn der erste Character nur dann entfernt würde, wenn er auch ein Buchstabe (a-zA-Z) ist -- so dass bei versehentlich doppelter Anwendung nicht aus dem Eintrag 123 der Eintrag 23 wird, denn das wäre fatal.

Wir muss ich meinen Query verändern, um das zu erreichen?

Vielen Dank im Voraus,
spirit
spirit
Neuer Benutzer
 
Beiträge: 24
Registriert: Mi 23. Feb 2011, 16:33

Beitragvon akretschmer » Do 10. Mär 2011, 07:05

spirit hat geschrieben:Hallo,

ich habe eine Tabelle mit einer Spalte, die Strings (PostgreSQL Typ character varying) enthält. Diese Strings muss ich mit einem Query so ändern, dass der erste Character entfernt wird. Die Tabellenspalte sieht z.B. so aus:

Code: Alles auswählen
A123
A6435
A345
B123
B33233
B321
Und nach dem Query sollte sie folgendermaßen aussehen:

Code: Alles auswählen
123
6435
345
123
33233
321
Der Datentyp soll nicht geändert werden (ich möchte also nicht, dass das danach Daten vom Typ Integer sind, das ist nicht nötig).

Ich habe auch schonmal Google bemüht und dabei das hier gefunden. Nach etwas Recherche für postgresql sieht mein Query jetzt also von der Shell aus so aus:

Code: Alles auswählen
psql -U <user> -d <database> -c "UPDATE <table> SET <field> = substr(<field>, 2, char_length(<field>));"
Noch schöner wäre es, wenn der erste Character nur dann entfernt würde, wenn er auch ein Buchstabe (a-zA-Z) ist -- so dass bei versehentlich doppelter Anwendung nicht aus dem Eintrag 123 der Eintrag 23 wird, denn das wäre fatal.

Wir muss ich meinen Query verändern, um das zu erreichen?

Vielen Dank im Voraus,


Code: Alles auswählen
test=*# select * from spirit ;
  t
------
 A123
 B234
 0123
 AAA1
(4 rows)

test=*# update spirit set t = regexp_replace(t,'^[a-zA-Z]','') ;
UPDATE 4
test=*# select * from spirit ;
  t
------
 123
 234
 0123
 AA1
(4 rows)

test=*# update spirit set t = regexp_replace(t,'^[a-zA-Z]','') ;
UPDATE 4
test=*# select * from spirit ;
  t
------
 123
 234
 0123
 A1
(4 rows)

test=*# update spirit set t = regexp_replace(t,'^[a-zA-Z]','') ;
UPDATE 4
test=*# select * from spirit ;
  t
------
 123
 234
 0123
 1
(4 rows)



Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5954
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon spirit » Fr 11. Mär 2011, 00:00

Wow, genau das, was ich gesucht habe. Vielen, vielen Dank!
spirit
spirit
Neuer Benutzer
 
Beiträge: 24
Registriert: Mi 23. Feb 2011, 16:33


Zurück zu SQL

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast

cron