SQL Konvertieren von Zeichenfolgen in Datum

SQL Konvertieren von Zeichenfolgen in Datum

das hat mich seit ein paar Tagen wirklich verwirrt und ich suche Hilfe. Ich verwende SQL Server 2017.

Ich versuche, Zeichenfolgen aus einem Feld mit freiem Format zu verarbeiten und sie entweder in ein Datum im Format „TT/MM/JJJJ“ umzuwandeln oder, wenn sie nicht in diesem Format vorliegen, den Text einfach wörtlich anzuzeigen.

Ich brauche dies in einer VIEW, kann also nicht SET LANGUAGE verwenden. Klingt einfach mitKonvertierenUndistDatumaber scheint nicht zu funktionieren.

Für den Codeausschnitt unten (denken Sie daran, dass dieser in einer ANSICHT sein wird) möchte ich den Text lesen und wenn die Zeichenfolge in ein Datum konvertiert wird (d. h. im Format „tt/mm/jjjj“ vorliegt, dann die Konvertierung in ein Datum ausführen, da ich es im Datumsformat benötige, damit Excel es erkennen kann (über Connect SQL Server-Datenbank)), und wenn keine Konvertierung in ein Datum erfolgt, dann den Text so anzeigen, wie er ist.

create table dateTest1 
( idx int, 
 dateStringTest varchar(15) 
); 
  
insert into dateTest1 (idx, dateStringTest) 
values (1, '13/01/2021'), (2, 'no'); 
 
 
select 
       case when isdate(convert(datetime, dateStringTest, 103)) = 1 
       then convert(datetime, dateStringTest, 103)
       else dateStringTest 
       end as dtres
from dateTest1 
--where idx = 1 
  
-- error: Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string. 
-- this error happens for idx = 2. Idx = 1 works ok

Ich wäre für jede Hilfe sehr dankbar, denn es macht mich ganz verrückt.

Vielen Dank im Voraus Paul

Antwort1

Ich bin mir nicht sicher, wie gut Ihre Datenbank dafür geeignet ist. Die Datenkonvertierungsfunktionen in SQL Server sind im Vergleich zu einigen anderen etwas „umständlich“.

Aus Sicht Ihrer Datenbank gilt jedoch:

Wenn etwasangeblichein ... zu seinDatum, dann essollte seinein Datum.
Es könnte "fehlen" (also null sein), aber es kann nichts anderes sein.
Wenn eswaretwas anderes sein soll, dann sollte es nicht behandelt werdenalsADatum.

Benutzer können nicht eintretenTermine- nur derCharakterdarstellungenvon ihnen.
Die Anzeige von [Zahlen und] Daten aus Ihrer Anwendung erfordert eine Formatierung auf dem "Weg nach draußen".
Das Einlesen von [Zahlen und] Daten in Ihre Anwendung erfordert das Gegenteil, eine "Entformatierung" (und natürlich eine Validierung) auf dem "Weg hinein".
Daten solltenstetsgespeichert werden inrichtigDatentyp – „Das richtige Werkzeug für die richtige Arbeit“.

Freitext-Parsing istwahrscheinlichDies geschieht am besten in Ihrer Anwendung, indem Sie den Datumswert extrahieren, validieren, „entformatieren“ und dann speichern.

verwandte Informationen