Den mest rimelige måde at gøre dette på er at fjerne tidsdelen af datetime-værdierne og sammenligne resultaterne, og den bedste måde at fjerne tidsdelen fra en datetime er sådan her:
cast(current_timestamp as date)
Jeg plejede at bruge og anbefale en proces, der lignede en af følgende to linjer:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
Men nu hvor SQL Server har Date
type, som ikke indeholder en tidskomponent, er der ringe grund til at bruge nogen af disse teknikker.
Endnu en ting at huske på er, at dette stadig vil fordybe en forespørgsel, hvis du skal gøre det for to datetime-værdier for hver række i en where-klausul eller join-betingelse. Hvis det er muligt, vil du på en eller anden måde udregne dette, så det er forudberegnet så meget som muligt, for eksempel ved at bruge en visning eller en beregnet kolonne.
Bemærk endelig, at DATEDIFF-funktionen sammenligner antallet af krydsede grænser. Dette betyder datediff i dage mellem '2009-09-14 11:59:59'
og '2009-09-15 00:00:01'
er 1, selvom der kun er gået 2 sekunder, men DATEDIFF i dage mellem '2009-09-15 00:00:01'
og '2009-09-15 11:59:59'
er stadig nul, selvom der er gået 86.398 sekunder. Det er egentlig slet ikke ligeglad med tidsdelen der, kun grænserne. Afhængigt af hvad din forespørgsel forsøger at gøre, kan du muligvis bruge det til din fordel.