2013-03-11 1 views
1

Attention - newbie question TSQL avant:Créer DateTimeOffset 00h01/23h59 de données DateTimeOffset pour jour même

J'ai un DateTimeOffset pour, disons, 2013-03-11 11:04:26.0000000 +00:00 et je dois créer deux nouvelles dates le même jour, un à 00h01 et un autre à 23h59.

Jusqu'à présent, j'ai essayé différentes choses avec DATETIMEOFFSETFROMPARTS et DATEPART mais il semble moyen de maladroit - est-il une solution simple à snip off les heures/minutes/etc. et juste utiliser le jour remplaçant le temps avec les deux requis?

Tous les conseils appréciés.

+0

Jetez un oeil à [meilleure approche pour enlever une partie du temps de datetime dans SQL Server] (http://stackoverflow.com/questions/1177449/best-approach- to-remove-time-part-of-datetime-in-sql-server), c'est peut-être utile. –

+0

Plutôt que de calculer ces dates bizarres - si elles sont à des fins de comparaison, il serait préférable de changer l'opération de comparaison (les gens essayent souvent d'obtenir le "dernier moment" d'un jour particulier, ignorant que la dernière minute (ou deuxième) de la journée, et donc 23:59 ne comprendra pas de tels événements). Utiliser '<' le jour suivant plutôt que <= '23:59 est une meilleure solution. –

+0

Malheureusement, nous sommes censés créer ces dates pour représenter une fenêtre de temps pour une autre partie de l'application - aucune comparaison impliquée du tout .. – Jay

Répondre

1

Aussi, vous pouvez essayer cette option

DECLARE @date datetimeoffset = '2013-03-11 11:04:26.0000000 +00:00' 
SELECT DATEADD(day, DATEDIFF(day, 0 , @date), '00:01'), 
     DATEADD(day, DATEDIFF(day, 0 , @date), '23:59') 

--Results:2013-03-11 00:01:00.000 2013-03-11 23:59:00.000 
+0

Encore mieux - à votre santé! – Jay

+0

De rien Jay;) –

1

Got it ...

select @pkgDate = CONVERT (date, @pkgDate) 

select DATEADD (minute, 1, @pkgDate) 
select DATEADD(hour, 23, DATEADD (minute, 59, @pkgDate)) 

..better/moyens plus concis de le faire encore apprécié.

Questions connexes