1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

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

Dieses Thema im Forum "DB2" wurde erstellt von serto, 6 Februar 2017.

  1. serto

    serto Neuer Benutzer

    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
     
  2. Dukel

    Dukel Datenbank-Guru

    Wieso speichert man ein GeburtsDATUM nicht als Datum?
     
    castorp gefällt das.
  3. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  4. serto

    serto Neuer Benutzer

    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.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  6. ukulele

    ukulele Datenbank-Guru

    In MSSQL bekommst du keine Results wenn eine Spalte bei cast() einen Syntaxfehler wirft, ich weiß nicht wie das in DB2 ist.
     
  7. Dravion

    Dravion Benutzer

    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 =>
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden