2017-11-21 1 views
1

Ich versuche, das Alter zum Zeitpunkt der Zulassung zu berechnen. Ich habe diese Abfrage versucht, aber in einigen Fällen habe ich Aufnahmedatum vor ihrem Geburtsdatum (schlechte Daten).Berechnen Sie das Geburtsdatum SQL DB2 und geben Sie schlechte Daten an

Zum Beispiel:

date of birth is 2016-10-22-00.00.00.000000 
admission date is 2016-09-09-14.51.00.000000 

Ich erhalte 0, aber ich sollte etwas mit dem bekommen (-) negative Zahl, so kann ich sehen, diese schlechte Daten. Danke

+0

ich einen Fall Aussage – Hogan

+0

verwenden würde, warum Sie Zeitstempel Unterschied zu 'CHAR()' konvertieren? –

+0

Der Datentyp für Geburtsdatum und Aufnahmedatum ist TIMESTAMP – user470091

Antwort

0

Sie sollten dies als getrennte Probleme lösen. Eine für das Alter und die andere für die Suche nach schlechten Daten.

So schlechte Daten finden sollte wie einfach:

SELECT *, 'good data', age(start, end) as age 
FROM person 
WHERE admission_date > date_of_birth 

UNION ALL 

SELECT *, 'bad data', null as age -- or age(end, start) 
FROM person 
WHERE admission_date < date_of_birth 
+0

umwandeln Danke für Ihre Hilfe Juan. Aber ich brauche es in einer Abfrage, damit ich meinen Kunden einen Bericht präsentieren kann. – user470091

+0

Was ist, wenn Sie Union alle verwenden? Überprüfen Sie meine Bearbeitung für die allgemeine Idee ... 'age()' ist Ihre Funktion, um das Alter zu berechnen –

+0

Danke Juan. Ich habe einen Weg gefunden, das zu lösen. Hat meine Antwort gepostet. – user470091

0
SELECT student_id, 
    CASE admission_date > date_of_birth THEN 
    Timestampdiff(256, Char(Timestamp(admission_date)-Timestamp(date_of_birth))) 

    ELSE 
     Timestampdiff(256, Char(Timestamp(date_of_birth)-Timestamp(admission_date))) 

      AS Admission_DOB 
    FROM person 
+0

Ich poste nur die Antwort, die mir hilft. Danke für Ihre Hilfe. – user470091

+0

@ user470091 - das ist nicht sehr im Geiste dieser Website - Sie haben eine Frage gestellt, die unmöglich zu beantworten war und dann meinen Code gestohlen und mit Informationen modifiziert, die nur Sie wissen, um Ihre Frage zu "beantworten". Es scheint, ich habe deine Frage beantwortet - denkst du nicht? – Hogan

+0

Ihre Antwort hat mir geholfen, gab aber immer noch 0 statt irgendeiner negativen Zahl, so dass ich leicht in den Ergebnissen sehen kann. – user470091

0
SELECT * 
FROM (SELECT student_id, 
       CASE WHEN ar.DT_ACCESS_RCVD < p.DT_BRTH 
        THEN '-9' 
        ELSE Timestampdiff(256, Char(Timestamp(admission_date) - 
                Timestamp(date_of_birth))) 
       END AS Admission_DOB 
     FROM person) AS a 
WHERE admission_dob <= '10' 
+0

Um als 'code' zu ​​formatieren, wählen Sie den Text und drücken Sie' ctrl-k' oder fügen Sie 4 Leerzeichen vor jeder Zeile hinzu. –

+0

Okay danke, Noted – user470091

Verwandte Themen