2017-11-20 8 views
0

In einer Tabelle (ExchangeRates) habe ich Datum wie 'dd.MM.yyyy' aber in anderen Tabelle Datum ist in Iso Datetime also, wenn ich versuche, in Where-Klausel einen Fehler zu erhalten ' Syntax in der Nähe von 'T00:' Erhielt gleichen Fehler, wenn ich zufalsche Syntax in der Nähe von 'T00:'

versucht
convert(date, date_field_with_isotime, 104) 

select top 1 * 
from ExchangeRates 
where ExchangeDate = dateadd(day, date_field_with_isotime, -1) 
+2

Warum speichern Sie * Zeichenketten *, wenn scheinbar das, was Sie tatsächlich speichern müssen, * Datum * sind? Die meisten Datenbanken verfügen über geeignete Typen zum Speichern von Datumsangaben, was bedeutet, dass Sie keine * string * -Formatierungsprobleme haben. –

+1

Welche Datenbank benutzen Sie? – GurV

+0

Können Sie einige Daten aus der ExchangeRates-Tabelle freigeben? – missionMan

Antwort

0

nehmen wir an, um Ihre Daten zu diesen ist

date_field_with_isotime  ExchangeDate 
(varhcar, ISO 8601 formatted) (date) 
2017-11-20      19/11/2017 00:00:00 
2017-11-19      19/11/2017 00:00:00 
2017-11-18      19/11/2017 00:00:00 

Die Abfrage wie folgt sein sollte:

select top 1 * 
from dbo.ExchangeRates 
where ExchangeDate = dateadd(day, -1, convert(date, date_field_with_isotime, 120)) 

Aber immer noch die "TOO:" statement ist seltsam, überprüfen, ob die Tabelle ausgelöst hat.

Verwandte Themen