Vous trouverez ci-dessous trois options d'utilisation de T-SQL pour renvoyer le premier jour du mois dans SQL Server.
Il peut s'agir du premier jour du mois en cours ou du premier jour d'un mois basé sur une date donnée.
Option 1
Voici une façon de procéder :
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);
Résultat :
2035-10-01
Cela implique l'utilisation de certaines fonctions T-SQL pour effectuer un décalage de date afin de ramener la date au début du mois.
Pour plus d'informations sur le DATEADD()
et DAY()
fonctions, voir DATEADD()
Exemples dans SQL Server et DAY()
Exemples dans SQL Server.
Option 2
Voici une autre option pour obtenir le premier jour du mois :
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);
Résultat :
2035-10-01 00:00:00.000
Ici, nous avons incorporé le DATEDIFF()
fonction dans notre calcul.
Bien que nous ayons déclaré la variable initiale en tant que date
valeur, le résultat est un datetime
valeur. Nous pouvons utiliser CONVERT()
ou CAST()
pour convertir le résultat en une date
valeur :
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);
Résultat :
2035-10-01
Option 3
Voici une autre option :
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Résultat :
2035-10-01 00:00:00.000
Semblable à l'option 2, le résultat est un datetime
valeur, mais cette fois c'est parce que nous avons déclaré la variable comme un datetime
valeur. Cependant, nous pouvons lui donner le même traitement pour le convertir en une date
valeur :
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);
Résultat :
2035-10-01
La raison pour laquelle nous n'avons pas déclaré la variable en tant que date
valeur est parce que cela entraînerait une erreur :
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Résultat :
Msg 206, Level 16, State 2, Line 3 Operand type clash: date is incompatible with int
C'est parce que nous essayons d'ajouter un entier à une date
valeur, qui ne fonctionne pas. Cependant, ajouter un entier à un datetime
value fonctionne, et c'est pourquoi nous avons déclaré la variable comme datetime
.