/ / '01.06.2012' <'01.06.2012 0: 00: 00.000' = wahr? - SQL, SQL-Server

'6/1/2012' <'6/1/2012 0: 00: 00.000' = wahr - SQL, SQL-Server

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 № 1

Meine Vermutung ist:

  1. Sie vergleichen zwei Zeichenfolgen (nichts in Ihrer Abfrage gibt an, dass sie als Datumsangaben verglichen werden sollen).
  2. 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