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()
e 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.