Als ein Join nicht funktionierte habe ich bemerkt, dass eine Spalte als Text erstellt worden war.
In der Spalte sind Integer, Strings aber auch Datums-Werte als Text eingetragen.
Für den Join benötige ich die Integer-Werte in dieser Spalte.
Wie geht man am besten vor?
- Neue Spalte als Integer erstellen
- Mit einem Cast alle Integer-Werte umwandeln
- Mit einem Trigger alle neuen Textwerte überprüfen
Frage:
- Wie überprüft man einen Textwert, ob dieser nur aus Integer-Werten besteht? (Länge ist immer gleich, bzw. die Werte stehen ja auch in einer anderen Tabelle zum Join bereit)
Geändert von karl_ha (25.08.2010 um 15:19 Uhr)
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
#Du musst dein DB-Model überarbeiten/überdenken.
Die Daten kommen (leider) nicht von mir. Dachte, ich seh nicht richtig...
Gemischt? Ganz schlecht.
Casten.Für den Join benötige ich die Integer-Werte in dieser Spalte.
Wie geht man am besten vor?
Code:test=*# create table karl (ha text); CREATE TABLE test=*# insert into karl values ('123'); INSERT 0 1 test=*# select ha::int * 10 from karl; ?column? ---------- 1230 (1 row)Gleich richtig machen?
- Neue Spalte als Integer erstellen
- Mit einem Cast alle Integer-Werte umwandeln
- Mit einem Trigger alle neuen Textwerte überprüfen
Mit einem regex prüfen.
Frage:
- Wie überprüft man einen Textwert, ob dieser nur aus Integer-Werten besteht? (Länge ist immer gleich, bzw. die Werte stehen ja auch in einer anderen Tabelle zum Join bereit)
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Welche Version von postgres?select ha::int * 10 from karl;
PHP-Code:FEHLER: Syntaxfehler bei »:«
LINE 1: select ha:int * 10 from karl
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Liegt am EMS SQL-Manager.
Über die Konsole geht es.
Was war nur die Fehlermeldung. Im Querry sind es 4 Punkte.Bei mir stehen da 4 Punkte: 2 nebeneinander und 2 übereinander.
Die einfache Abfrage:
Mit cast und regexPHP-Code:test=# SELECT * FROM karl;
ha | id
-------------+----
123 | 1
5363 | 2
asd123123aa | 3
(3 Zeilen)
cheersPHP-Code:
test=# SELECT (regexp_matches(ha, E'[0-9._%-]+'))[1]::int AS test FROM karl WHERE ha ~ E'[0-9._%-]+';
test
--------
123
5363
123123
(3 Zeilen)
Noch eine Frage dazu:
Wie sagt man, wenn der Wert genau 10 Zeichen haben muss.
Edit:
Nette Seite: Using Regular Expressions in PostgreSQL - O'Reilly MediaCode:SELECT record FROM myrecords WHERE record ~ '[0-9]{4,}';
Geändert von karl_ha (25.08.2010 um 17:43 Uhr)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen