Datum vergleichen von Char-Spalte mit einer Date-Spalte?

serto

Neuer Benutzer
Beiträge
2
Hallo,

das Geburtsdatum wird als Char hinterlegt und in einer weiteren Spalte wird das Eintrittsdatum als Date abgespeichert. Ich habe das Problem das ich die beiden Spallten nicht vergleichen kann.
z.B. will ich wissen ob es einen Eintrag gibt wo der Eintrittsdatum größer (älter) ist als das Geburtsdatum

Select * From Tabelle Where GebDatum < EintrDatum ;

das könnte ich nur machen wenn ich das Ein- und Austrittsdatum miteinander vergleiche. In diesem Falle gibt es ne Fehlermeldung. Muss ich die Spalte erstmal von Char in Date Format bringen oder was habe ich hier für Möglichkeiten. Das Geburtsdatum wird folgendermaßen hinterlegt 'yyyymmdd' und das Eintrittsdatum 'yyyy-mm-dd'

Vielen Dank für Eure Hilfe
 
Werbung:
Neben der Frage, warum Du es nicht gleich richtig machst: Du kannst es casten. In PostgreSQL <string>::date, in anderen Systemen z.B. via cast(...). Rechne damit, daß das nicht immer klappt, denn ein String wird bei der Eingabe durch die DB nicht geprüft, ob er ein valides Datum ist. Verwende also gleich korrekte Datentypen - dafür sind sie da.
 
Zu euer Frage, ich habe die Datenbank nicht erstellt sondern soll nur eine Analyse machen ob es derart Daten in der DB existieren. Die kann man jetzt auch nicht so eben mal abändern. Sonst bin ich da total bei euch.
 
die auf lange Sicht beste Lösung wäre, via ALTER TABLE ... die Spalte auf DATE zu ändern. Prüfe vorher, ob a) das geht (mit allen Records) und b) die Applikation das mitmacht.
 
In MSSQL bekommst du keine Results wenn eine Spalte bei cast() einen Syntaxfehler wirft, ich weiß nicht wie das in DB2 ist.
 
Werbung:
Das lässt sich bei DB/2 so realisieren


C:\Program Files\IBM\SQLLIB\BIN>db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.1.4.4

db2 => connect to test

Database Connection Information

Database server = DB2/NT64 11.1.4.4
SQL authorization ID = DRAVION
Local database alias = TEST

db2 => CREATE TABLE persons(id int, name varchar(60), birthdate varchar(60), entrydate date)
DB20000I The SQL command completed successfully.
db2 => INSERT INTO persons (id, name, birthdate, entrydate) VALUES (1001,'Peter', '31.12.1980', '1980-12-31')
DB20000I The SQL command completed successfully.
db2 => INSERT INTO persons (id, name, birthdate, entrydate) VALUES (1002,'Heiko', '31.12.1982', '2017-11-11')
DB20000I The SQL command completed successfully.
db2 => INSERT INTO persons (id, name, birthdate, entrydate) VALUES (1003,'Markus', '31.12.1985', '2019-10-1')
DB20000I The SQL command completed successfully.
db2 => INSERT INTO persons (id, name, birthdate, entrydate) VALUES (1004,'Rainer', '09.11.1985', '1985-11-09')
DB20000I The SQL command completed successfully.


// Date char with SQL Date compare using translate
db2 => SELECT name FROM persons WHERE date(translate('GHIJ-DE-AB',birthdate,'ABCDEFGHIJ')) = entrydate

NAME
------------------------------------------------------------
Peter
Rainer

2 record(s) selected.

db2 =>
 
Zurück
Oben