Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [SQL] String -> Date Konvertierungsfehler (https://www.delphipraxis.net/154334-%5Bsql%5D-string-date-konvertierungsfehler.html)

Neutral General 7. Sep 2010 09:27

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBExpert

[SQL] String -> Date Konvertierungsfehler
 
Hallo,

Habe gerade eine Query die ca. grob so aussieht:

SQL-Code:
SELECT
  CAST(tabelle.charfeld as DATE)
FROM tabelle
Problem ist nur dass in diesem Feld ein String steht und aufgrund ungünstiger Umstände KANN es sein, dass in diesem Feld KEIN Datum steht. Daran kann ich leider auch nichts machen.
Wenn das jedoch bei einem Datensatz der Fall ist bekomme ich natürlich von Firebird einen Fehler an den Kopf geschmissen.

Gibt es ne Möglichkeit dieses Problem zu umgehen, bzw. solche Felder zu ignorieren oder die Fehler/Exceptions abzufangen und stattdessen NULL zu selektieren? Sone Art coalesce für den Fall, dass die Konvertierung fehlschlägt.

Gruß
Neutral General

mkinzler 7. Sep 2010 09:48

AW: [SQL] String -> Date Konvertierungsfehler
 
Du könntest das Ganze in eine IIF() packen und per regex die Gültigkeit überprüfen.
In diesem Fall würde ich ich die Konvertierung aber im Programm machen

tsteinmaurer 7. Sep 2010 11:00

AW: [SQL] String -> Date Konvertierungsfehler
 
Schreib dir eine Selectable Stored Procedure mit einem entsprechenden Exception Handling ausgestattet wo du dann entscheidest, was zurückgegeben werden soll, wenn es sich um kein gültiges Datum handelt.

p80286 7. Sep 2010 11:04

AW: [SQL] String -> Date Konvertierungsfehler
 
was wären denn die möglichen Feldinhalte?

Unter Oracle würde ich das ungefähr so lösen
Code:
select
  decode(charfield,null,null,' ',null,to_date(charfield,'yyyymmmdd'))
Wobei ich der Einfachheit halber annehme, daß als Ausnahmen nur Nulls und Blanks auftauchen können.

Gruß
K-H

Neutral General 7. Sep 2010 11:04

AW: [SQL] String -> Date Konvertierungsfehler
 
Hallo,

Habs jetzt so gelöst:

SQL-Code:
SELECT
  case
    when (tabelle.charfeld like "__.__.____") then CAST(tabelle.charfeld as DATE)
    else 'TODAY'
  end as feld
FROM tabelle
Ist nicht 100%ig narrensicher, aber ich denke für meine Zwecke wird es erstmal reichen ;)

@p80286: Nein es könnte theoretisch auch "Hallo Welt" drin stehn. Das ist gerade das Problem. Ansonsten würde ich das sicher auch (leichter) hinbekommen.

Aber danke für eure Hilfe :)

p80286 7. Sep 2010 11:28

AW: [SQL] String -> Date Konvertierungsfehler
 
Wenn es ein solches Chaos ist dann denk auch an
Code:
_._.__
__._.__
_.__.__

_._.____
... usw.
Gruß K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz