Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server DATEPART() vs DATENAME():qual è la differenza?

Quando si lavora con le date in SQL Server, a volte potresti trovarti a cercare il DATEPART() funzione, solo per rendersi conto che ciò di cui hai veramente bisogno è il DATENAME() funzione. Quindi potrebbero esserci altre situazioni in cui DATEPART() è effettivamente preferibile a DATENAME() .

Allora qual è la differenza tra il DATEPART()DATENAME() funzioni?

Scopriamolo.

Definizioni

La differenza tra queste due funzioni sta nelle loro definizioni:

DATEPART()
Restituisce un numero intero che rappresenta la parte di data specificata della data specificata .
DATENAME()
Restituisce una stringa di caratteri che rappresenta la parte di data specificata della data specificata

Secondo le loro definizioni, l'unica differenza tra queste due funzioni è il tipo restituito:

  • DATEPART() restituisce un numero intero.
  • DATENAME() restituisce una stringa.

Quindi questa è la differenza.

In entrambe le definizioni, datepart è la parte della data desiderata (ad es. mese) e data è la data da cui vuoi restituire la parte di data.

Nomi di mesi e giorni

L'esempio più ovvio in cui DATENAME() è più adatto a DATEPART() è quando vuoi che venga restituito il nome del giorno o del mese.

Ecco un esempio.

DATENAME()

Ecco cosa DATENAME() ritorna quando vogliamo il giorno della settimana e il mese da una data:

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

Risultato:

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

PARTE DATA()

Ecco cosa DATEPART() resi:

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

Risultato:

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

Quando i risultati sono gli stessi

Nella maggior parte dei casi, i risultati di entrambe le funzioni sembreranno gli stessi. Questo perché la maggior parte delle parti della data sono numeriche per loro stessa natura. Ad esempio:

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

Risultato:

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

Tuttavia, come accennato, uno restituisce un numero intero e l'altro restituisce una stringa.

Possiamo vederne la prova con il seguente esempio:

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

Risultato:

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

Il segno più è un operatore aritmetico sui tipi di dati numerici, ma è un operatore di concatenazione di stringhe sulle stringhe.