350 votes

Comment puis-je sélectionner le premier jour d'un mois en SQL?

Je dois juste sélectionner le premier jour du mois d’une variable donnée.

Je sais que c'est assez facile à faire avec ce type de code:

 select CAST(CAST(YEAR(@mydate) AS VARCHAR(4)) 
+ '/' + CAST(MONTH(@mydate) AS VARCHAR(2)) + '/01' AS DATETIME)
 

mais ce n'est pas très élégant, et probablement pas très rapide non plus.

Y a-t-il une meilleure manière de faire cela ? (J'utilise SQL Server 2008)

673voto

LukeH Points 110965
SELECT DATEADD(month, DATEDIFF(month, 0, @mydate), 0) AS StartOfMonth

86voto

Marcos Krucken Points 1
Serveur SQL 2008

14voto

Mayo Points 5532

Le lancement d'une chaîne (c'est-à-dire "5/1/2009") à datetime est certainement plus lisible mais nous avons trouvé du code il y a quelque temps qui renverrait le premier du mois ...

 DECLARE @Date DATETIME
//...
SELECT DATEADD(mm, DATEDIFF(mm,0,@Date), 0)
 

6voto

dove Points 12456

C'est probablement assez rapide. Pourquoi ne pas le créer comme une fonction SQL.

 CREATE FUNCTION [dbo].[GetFirstDayOfMonth] ( @InputDate    DATETIME )
RETURNS DATETIME
BEGIN

    RETURN CAST(CAST(YEAR(@InputDate) AS VARCHAR(4)) + '/' + 
                CAST(MONTH(@InputDate) AS VARCHAR(2)) + '/01' AS DATETIME)

END
GO
 

4voto

Alan Burstein Points 21

Cela fonctionne aussi:

     SELECT DATEADD(DAY,(DATEPART(DAY,@mydate)-1)*(-1),@mydate) AS FirstOfMonth
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X