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
2
A
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)
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. –
** 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. –
Votre requête permet également d'aller facilement un mois en arrière ou en avant. Très utile! Définitivement +1. –