Wenn ich diesen Code in SQL-Server 2008 ausführen,
select case when "6/1/2012" < "6/1/2012" then 1 else 0 end
Ich bekomme 0
Und wenn ich renne,
select case when "6/1/2012 0:00:00.000" < "6/1/2012" then 1 else 0 end
Ich bekomme auch 0.
ABERwenn ich renne
select case when "6/1/2012" < "6/1/2012 0:00:00.000" then 1 else 0 end
Ich bekomme 1
Warum ist das?
Antworten:
12 für die Antwort № 1Meine Vermutung ist:
- Sie vergleichen zwei Zeichenfolgen (nichts in Ihrer Abfrage gibt an, dass sie als Datumsangaben verglichen werden sollen).
- Wenn zwei Zeichenfolgen gleich sind, außer für zusätzliche Zeichen in einer, ist die längere Zeichenfolge "größer".
Sie erwarten möglicherweise, dass Ihre Datenbank Datumsangaben automatisch erkennt, dies würde jedoch eine Analyse erfordern jeden String geben Sie es für den Fall, dass es ein Datum ist, das die Leistung beeinträchtigen könnte und auch verwirrend sein könnte (wenn etwas zu einem Datum konvertiert wird und Sie dies nicht meinen.)
6 für die Antwort № 2
Sie müssen sie als werfen datetime
um sie als zu vergleichen datetime
Werte. Das kehrt zurück 0
:
select case when cast("6/1/2012" as datetime) < cast("6/1/2012 0:00:00.000" as datetime) then 1 else 0 end