ich eine Abfrage lief, in der ich alle Aufträge finden wollte, die Juni gemacht wurden beginnend 1. Ursprünglich habe ich diesen Code:SQL-Datum Zeitformat auf der Suche gibt unterschiedliche Ergebnisse
select blah blah
Where ORDERS.ORDER_DATE > '2016-05-31 23:59:59.999'
Aber die Abfrage fehlgeschlagen um die am 1. Juni getätigten Bestellungen auszuwählen. Wenn ich den Code änderte:
Where ORDERS.ORDER_DATE > '2016-05-31 23:59:59.99'
Ich bekam die Bestellungen vom 1. Juni. Der Unterschied ist der _2_ nines (.99)
am Ende gegen _3_ nines (.999
) in den Sekundenbruchteilen. Die Daten zeigen immer 3 Ziffern in den Brüchen. (Unsere Daten haben nur Nullen in den Sekundenbruchteilen "XX:XX:XX.000"
)
Was geht hier vor?
Quoten sind eine Million zu eins, aber nur um Mitternacht würde jede Transaktion wegfallen. Das heißt, danke für den 3-Millisekunden-Artikel. Genau das habe ich erlebt, bevor ich meinen Ansatz geändert habe. –
ja um Mitternacht aber denken Sie darüber nach, wenn Sie einen DATETIME-Filter wie diesen verwenden, aber wirklich auf eine Spalte anwenden, die wirklich nur ein DATUM ist, was bedeutet, dass alles Mitternacht ist, dann schließen Sie tatsächlich jedes Ergebnis am 6/1 nicht nur Mitternacht aus.Dies ist ein Hauptgrund, nicht BETWEEN zu verwenden und ein> = (oder <=) auf einer Seite und nur das> oder
Matt
Die 3ms-Rundung ist nicht genau richtig: "datetime Werte werden auf Inkremente von .000, .003 oder .007 Sekunden gerundet, wie in der folgenden Tabelle gezeigt. " https://msdn.microsoft.com/en-us/library/ms187819.aspx Tatsächlich werden 4 von 10 auf .XX7 gerundet. Dies gilt nicht für "datetime2". – shawnt00