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

6 fonctions pour obtenir le jour, le mois et l'année à partir d'une date dans SQL Server

Transact-SQL inclut un tas de fonctions qui nous aident à travailler avec les dates et les heures. L'une des tâches les plus courantes lorsque vous travaillez avec des dates consiste à extraire les différentes parties de la date. Par exemple, parfois nous ne voulons que l'année ou le mois. D'autres fois, nous pourrions vouloir le jour de la semaine. Quoi qu'il en soit, il existe de nombreuses façons de procéder dans SQL Server.

En particulier, les fonctions suivantes vous permettent de renvoyer le jour, le mois et l'année à partir d'une date dans SQL Server.

  • DAY() , MONTH() , et YEAR()
  • DATEPART()
  • DATENAME()
  • FORMAT()

Ces fonctions sont expliquées ci-dessous.

Les fonctions JOUR(), MOIS() et ANNEE()

La façon la plus évidente de retourner le jour, le mois et l'année à partir d'une date est d'utiliser les fonctions T-SQL du même nom. Oui, T-SQL a des fonctions spécialement conçues pour renvoyer ces trois parties de date.

Voici un exemple de leur fonctionnement :

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DAY(@date) AS DAY,
    MONTH(@date) AS MONTH,
    YEAR(@date) AS YEAR;

Résultat :

+-------+---------+--------+
| DAY   | MONTH   | YEAR   |
|-------+---------+--------|
| 2     | 6       | 2018   |
+-------+---------+--------+

Ces fonctions renvoient la partie de date sous la forme d'un entier. Ils retournent le même résultat que le DATEPART() la fonction renvoie pour la partie de date spécifiée.

La fonction DATEPART()

Le DATEPART() La fonction a été spécialement conçue pour renvoyer des parties spécifiées d'une date. Par conséquent, nous pouvons utiliser cette fonction pour retourner exactement le même résultat que l'exemple précédent :

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATEPART(day, @date) AS DAY,
    DATEPART(weekday, @date) AS WEEKDAY,
    DATEPART(month, @date) AS MONTH,
    DATEPART(year, @date) AS YEAR;

Résultat :

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | 7         | 6       | 2018   |
+-------+-----------+---------+--------+

L'un des avantages de l'utilisation de cette fonction est que vous pouvez également renvoyer d'autres parties de la date et de l'heure. Comme vous pouvez le voir avec cet exemple, j'ai renvoyé le jour de la semaine ainsi que le jour (day est le jour du mois, weekday est le jour de la semaine). Vous pouvez également renvoyer les différentes parties de l'heure, telles que les minutes, les secondes, les millisecondes, etc. Pour plus d'exemples, consultez DATEPART() Exemples dans SQL Server.

Le DATEPART() La fonction renvoie son résultat sous la forme d'un entier, et par conséquent, vous ne pourrez pas obtenir le nom du mois ou le nom du jour de la semaine à partir de la date. Mais ne vous inquiétez pas, vous pouvez utiliser le DATENAME() ou FORMAT() fonctions pour cela.

La fonction DATENAME()

Le DATENAME() la fonction est similaire à la DATEPART() fonction, sauf qu'elle renvoie le résultat sous la forme d'une chaîne de caractères au lieu d'un entier. DATENAME() renvoie également le mois et le jour de la semaine sous la forme de leur nom complet, plutôt que de leur valeur numérique.

Exemple :

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATENAME(day, @date) AS DAY,
    DATENAME(weekday, @date) AS WEEKDAY,
    DATENAME(month, @date) AS MONTH,
    DATENAME(year, @date) AS YEAR;

Résultat :

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | Saturday  | June    | 2018   |
+-------+-----------+---------+--------+

Pour plus d'exemples de cette fonction, voir DATENAME() Exemples dans SQL Server.

La fonction FORMAT()

Nous pouvons utiliser le FORMAT() fonction pour retourner les mêmes valeurs qu'avec le DATENAME() fonction, et plus encore.

C'est une fonction plus polyvalente que les précédentes. Il vous permet de formater la date/heure ainsi que les valeurs numériques sous forme de chaînes. La valeur renvoyée est soit nvarchar ou null (selon l'entrée), et la longueur de la chaîne est déterminée par le format spécifié.

FORMAT() fournit également plus d'options pour la présentation de la partie de date. Vous pouvez spécifier s'il faut l'afficher sous la forme d'un seul caractère, de deux caractères, de trois, de quatre et même de cinq dans certains cas.

Voici des exemples à démontrer.

Jour

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS d,
    FORMAT(@date, 'dd') AS dd,
    FORMAT(@date, 'ddd') AS ddd,
    FORMAT(@date, 'dddd') AS dddd;

Résultat :

+-----+------+-------+----------+
| d   | dd   | ddd   | dddd     |
|-----+------+-------+----------|
| 2   | 02   | Sat   | Saturday |
+-----+------+-------+----------+

Mois

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'M ') AS M,
    FORMAT(@date, 'MM') AS MM,
    FORMAT(@date, 'MMM') AS MMM,
    FORMAT(@date, 'MMMMM') AS MMMM;

Résultat :

+-----+------+-------+--------+
| M   | MM   | MMM   | MMMM   |
|-----+------+-------+--------|
| 6   | 06   | Jun   | June   |
+-----+------+-------+--------+

Année

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;

Résultat :

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 18  | 18   | 2018  | 2018   | 02018   |
+-----+------+-------+--------+---------+

Notez que nous avons la possibilité de formater la partie année en cinq chiffres.

À propos du nombre de chiffres

Lors du renvoi d'une partie de date sous forme numérique, le spécificateur de format détermine le nombre minimum de chiffres à renvoyer. Par exemple, lors de l'utilisation de  yyy , l'année sera renvoyée sous forme de trois chiffres si l'année est 0008 mais sous forme de quatre chiffres si l'année est 2008 .

Exemple :

DECLARE @date datetime2 = '0008-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;  

Résultat :

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 8   | 08   | 008   | 0008   | 00008   |
+-----+------+-------+--------+---------+

De plus, lors de l'utilisation de l'option unique (par exemple, d ) en tant que spécificateur de date, vous devrez ajouter un espace si vous souhaitez uniquement que cette partie de date soit renvoyée par elle-même. Si vous ne le faites pas, vous obtiendrez plus que cette seule partie de date.

Exemple :

DECLARE @date datetime2 = '2008-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS 'Space',
    FORMAT(@date, 'd') AS 'No Space',
    FORMAT(@date, 'M ') AS 'Space',
    FORMAT(@date, 'M') AS 'No Space',
    FORMAT(@date, 'y ') AS 'Space',
    FORMAT(@date, 'y') AS 'No Space';

Résultat :

+---------+------------+---------+------------+---------+------------+
| Space   | No Space   | Space   | No Space   | Space   | No Space   |
|---------+------------+---------+------------+---------+------------|
| 2       | 6/2/2008   | 6       | June 2     | 8       | June 2008  |
+---------+------------+---------+------------+---------+------------+

Pour en savoir plus FORMAT() exemples, voir Comment formater la date et l'heure dans SQL Server.