2010-07-07 8 views
5

Ich möchteWie füge ich Stunden, Minuten, Sekunden zu dateadd sql hinzu?

So würde 2010.07.07 00.00.00 bis 2010.07.07 23.59.59

das sollte also die voll sein heute einen ganzen Tag bekommen sein 24 Stunden seit 12:00 Uhr wäre dann der 8. dann.

So habe ich diese

select DATEADD(??, ??, DATEDIFF(dd, 0, GETUTCDATE())) 

Wie kann ich es 23 Stunden 59mins und 59 Sekunden, um es hinzuzufügen machen?

Antwort

5
DECLARE @start DATETIME 
DECLARE @end DATETIME 

SET @start = DATEADD(dd, 0, DATEDIFF(dd, 0, GETUTCDATE())) 
SET @end = DATEADD(dd, 1, DATEADD(ms, -3, @start)) 
+0

Ist das besser? Wird diese Race-Bedingung auftreten? – chobo2

+0

@ chobo2: Dies berechnet '@ end' in Bezug auf' @ start' und nicht durch 'GETUTCDATE()' a Das zweite Mal, also ist es nicht anfällig für die Race Condition. Im (unwahrscheinlichen) Ereignis, dass das Datum über Mitternacht zwischen den beiden Aussagen tickt, wird der Bereich immer noch ein einzelner Tag sein. – LukeH

3

Try this:

DATEADD(second, -1, DATEADD(DAY, 1,"7/7/2010 12:00:00"))

+0

Hmm ich kann es nicht schwer natürlich codiert haben. Also nahm ich, was Sie hatten und machte dies, es scheint zu funktionieren, aber dann wieder weiß ich nicht, was ich wirklich tat DATEADD (dd, 0, DATEDIFF (dd, 0, GETUTCDATE())) UND DATEADD (ss, -1 , DATEDIFF (TT, -1, GETUTCDATE()) – chobo2

+0

@ chobo2: Es gibt eine winzige Chance auf eine Race Condition mit dem Code in Ihrem Kommentar - wenn das Datum zwischen Mitternacht zwischen der ersten Anweisung und der Sekunde tickt, dann werden Sie am Ende landen mit einem Bereich, der zwei Tage statt eins abdeckt – LukeH

Verwandte Themen