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

SQL Server DATEPART() vs DATENAME() - Quelle est la différence ?

Lorsque vous travaillez avec des dates dans SQL Server, vous pouvez parfois vous retrouver à atteindre le DATEPART() fonction, seulement pour réaliser que ce dont vous avez vraiment besoin est le DATENAME() une fonction. Ensuite, il peut y avoir d'autres situations où DATEPART() est en fait préférable à DATENAME() .

Alors, quelle est la différence entre DATEPART() et DATENAME() fonctions ?

Découvrons.

Définitions

La différence entre ces deux fonctions réside dans leurs définitions :

DATEPART()
Renvoie un entier qui représente la partie de date spécifiée de la date spécifiée .
DATENAME()
Renvoie une chaîne de caractères qui représente la partie de date spécifiée de la date spécifiée

Selon leurs définitions, la seule différence entre ces deux fonctions est le type de retour :

  • DATEPART() renvoie un entier.
  • DATENAME() renvoie une chaîne.

Voilà donc la différence.

Dans les deux définitions, datepart est la partie de la date que vous voulez (par exemple, le mois), et date est la date à partir de laquelle vous voulez que la partie de date soit renvoyée.

Noms des mois et des jours

L'exemple le plus évident où DATENAME() est plus adapté à DATEPART() correspond au moment où vous souhaitez que le nom du jour ou du mois soit renvoyé.

Voici un exemple.

NOMDATE()

Voici ce que DATENAME() retourne quand on veut le jour de la semaine et le mois à partir d'une date :

SELECT
    DATENAME(weekday, '2000-01-01') AS 'DATENAME Weekday',
    DATENAME(month, '2000-01-01') AS 'DATENAME Month';

Résultat :

+--------------------+------------------+
| DATENAME Weekday   | DATENAME Month   |
|--------------------+------------------|
| Saturday           | January          |
+--------------------+------------------+

DATEPART()

Voici ce que DATEPART() renvoie :

SELECT
    DATEPART(weekday, '2000-01-01') AS 'DATEPART Weekday',
    DATEPART(month, '2000-01-01') AS 'DATEPART Month';

Résultat :

+--------------------+------------------+
| DATEPART Weekday   | DATEPART Month   |
|--------------------+------------------|
| 7                  | 1                |
+--------------------+------------------+

Quand les résultats sont les mêmes

Dans la plupart des cas, les résultats des deux fonctions sembleront identiques. En effet, la plupart des parties de date sont numériques de par leur nature même. Par exemple :

SELECT
    DATEPART(year, '2000-01-01') AS DATEPART,
    DATENAME(year, '2000-01-01') AS DATENAME;

Résultat :

+------------+------------+
| DATEPART   | DATENAME   |
|------------+------------|
| 2000       | 2000       |
+------------+------------+

Cependant, comme mentionné, l'un renvoie un entier et l'autre une chaîne.

Nous pouvons en voir la preuve avec l'exemple suivant :

SELECT
    DATEPART(year, '2000-01-01') + '1' AS DATEPART,
    DATENAME(year, '2000-01-01') + '1' AS DATENAME;

Résultat :

+------------+------------+
| DATEPART   | DATENAME   |
|------------+------------|
| 2001       | 20001      |
+------------+------------+

Le signe plus est un opérateur arithmétique sur les types de données numériques, mais c'est un opérateur de concaténation de chaînes sur les chaînes.