2010-09-21 7 views
2

J'ai un paramètre de date (@rptMonth) qui est sélectionné par l'utilisateur à partir d'un calendrier datepicker. La date doit être le premier jour du mois. Peu importe ce que l'utilisateur sélectionne, je voudrais transformer cela en mm/01/yyyy. Par exemple, j'ai besoin du premier jour du mois. Donc, si l'utilisateur sélectionne 06/22/2010, je dois le transformer en 06/01/2010. Donc dans ma requête ce serait quelque chose comme WHERE YEAR_MONTH = DATEADD ("m", datediff ("m", "1900-01-01", @ RptMonth), "1900-01-01"), "mm/jj/yyyy "mais quand j'essaye ceci je reçois une syntaxe incorrecte près de ','. Je ne sais pas si cela fonctionnera même.premier jour du même mois

Répondre

5

Mise à jour:

select dateadd(month, datediff(month, 0, getdate()), 0) 

ancien:

Essayez ceci:

declare @arbitraryDate datetime; 
set @arbitraryDate = getdate(); 
set @arbitraryDate = dateadd(dd, datediff(dd, 0, @arbitraryDate), 0) --strip time 
select dateadd(dd, -day(@arbitraryDate)+1,@arbitraryDate) --strip days 

Ou ceci:

select cast(convert(varchar(6), getdate(), 112) + '01' as datetime) 
3

Cela devrait fonctionner aussi:

SELECT CAST(CAST(YEAR(@pInputDate) AS VARCHAR(4)) + 
      CAST(MONTH(@pInputDate) AS VARCHAR(2)) + '01' AS DATETIME) 
+0

Je crois que 2010/12/12 est dépendant de la culture. Bien que '20101212' ne soit pas. Je ne sais pas pourquoi je le sais. –

+1

** Mise à jour **. 'set dateformat ydm; sélectionnez cast ('2010/24/12' comme datetime) 'Voilà! Ambiguïté. Mais quel que soit le paramètre 'dateformat', cette requête' select cast ('20101224' comme datetime) 'fonctionnera très bien. –

+0

Votre requête permet également d'aller facilement un mois en arrière ou en avant. Très utile! Définitivement +1. –