Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

3 façons d'obtenir le premier jour du mois dans SQL Server

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 .