Einschränkung auf einen Datumsbereich mit Genauigkeit im MS SQL / SQL Server 2005

Möchte ich einen Bericht so einschränken, um Datensätze zurückzugeben, die von Datum A bis Datum B Dies ist, was ich Tue:

declare @startDate varchar(20)
declare @endDate varchar(20)
set @startDate = '01/01/2008'
set @endDate = '04/01/2008'
-- test what are the start and end dates
select min(date),max(date) from view_Inspections 
where date between @startDate and @endDate

... das wurde mir gesagt zurückgegebenen Datensätze von 12 am Jan 1. durch 11:59 pm 31 März (midnight, ist die Standardeinstellung, wenn keine Zeit angegeben wurde). Aber ich bemerkte eine Diskrepanz, die ist, wenn ein Datensatz hat eine Zeit von 00:00:00, dass es Teil dieser Gruppe.

Gibt es einen genauer Weg, dies zu tun, so wird es wieder genau den Datumsbereich, die ich will?*

Ich habe versucht, unter Verwendung der Zeit:

declare @startDate varchar(20)
declare @endDate varchar(20)
set @startDate = '01/01/2008 00:00:00'
set @endDate = '04/01/2008 11:59:59'
-- test what are the start and end dates
select min(date),max(date) from view_Inspections 
where date between @startDate and @endDate

... aber ich bemerkte etwas wackelig: SQL Server RUNDEN die Hundertstel-Sekunde bis um die Hälfte. Also ich bekomme das 1. April ist record (ha! April Fool ' s aufnehmen! grr), wenn ich jedes mal später als 11:59:29. Warum ist das so?

  • (Ich bin mir sicher es ist. Ich bin neu in diesem. Vielen Dank für Ihre Hilfe!!!)
  • Danke!!! Dies hilft eine Menge. @ G-Mastros: Es ist SmallDateTime -- danke für die Erklärung, das Verhalten dieses Datentyps!
InformationsquelleAutor aesdanae | 2009-01-05
Schreibe einen Kommentar