SQL REPLACE

PeterPaaan

Neuer Benutzer
Beiträge
3
Guten Abend ich habe folgendes Problem ich muss Patientendaten auswerten die keine Jahrhunderte Angabe haben zB 006909 also mit Monat um zu prüfen wie alt der Patient sein kann also entweder 1969 oder 2069 soll geprüft werden ob dieses Datum über aktuellem Jahr ist.
Aus dem Grund habe ich aktuelles ja <= REPLACE(REPLACE(GEB,LEFT(GEB,2),'20'),RIGHT(GEB,2),'')
DAS soll bewirken das er das Datum 2016 mit dem fiktiven Patienten Geburtstag 2069 vergleicht wie im Beispiel.
DAs Problem ist das ich nach Auswertungen auch Patienten habe die 2099 geboren worden sind was logisch nicht möglich ist. Also habe ich die Abfrage geprüft und das ist aufgefallen das er bei einigen Geburtstagen die führenden 00 nicht zählt und somit alleine die 20 schreibt die immer kleiner ist als 2016 und somit das Datum denn auch 2099 setzten kann.
Die Zeichenkette ist immer genau 6 Zeichen lang was vorher schön geprüft und ersetzt worden ist falls es auftreten sollte.
Nun kurz gefasst wie kann es möglich sein das er sporadisch die ersten 00 nicht akzeptiert und die Zeichenkette somit falsch auseinander nimmt.

Vielen Dank
 
Werbung:
Ich könnte eine Zusätzliche spalte erzeugen wo ich das datum convertiert abspeichern könnte und denn die berechnung machen, aber ich kann das cha(6) feld nicht in einen datumswert nach JJJJMM convertieren.
 
Werbung:
Code:
WITH tabelle(GEB) AS (
   SELECT '006909' UNION ALL
   SELECT '009909' UNION ALL
   SELECT '000909' UNION ALL
   SELECT '000009'
   )
SELECT   GEB,
     REPLACE(REPLACE(GEB,LEFT(GEB,2),'20'),RIGHT(GEB,2),'') AS alt,
     (   CASE
       WHEN   left(GEB,2) LIKE '[1-2][0-9]'
       THEN   GEB
       WHEN   left(GEB,2) = '00'
       THEN   (   CASE
             WHEN   cast('20' + right(left(GEB,4),2) AS SMALLINT) >= 2016
             THEN   '19'
             ELSE   '20'
             END ) + right(GEB,4)
       ELSE   NULL
       END ) AS neu
FROM   tabelle
Du solltest aber tatsächlich das Datum idealerweise als DATE speichern (dann halt immer mit Tag 1) und nur für die Ausgabe / Eingabe konvertieren oder zumindest per Constraint den Inhalt auf korekte Syntax überwachen.
 
Zurück
Oben