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

DATENAME() Esempi in SQL Server

In SQL Server, T-SQL DATENAME() La funzione restituisce una stringa di caratteri che rappresenta la parte di data specificata della data specificata . Ad esempio, puoi trasmettere 2021-01-07 e fare in modo che SQL Server restituisca solo la parte del mese (January ).

Il tipo restituito per DATENAME() è nvarchar .

Esempi sotto.

Sintassi

Il DATENAME() la sintassi va così:

DATENAME ( datepart , date )

Dove datepart è la parte di date (un valore di data o ora) per il quale verrà restituita una stringa di caratteri.

Esempio 1

Ecco un esempio di base in cui restituisco il componente mese da una data.

SELECT DATENAME(month, '2021-01-07') AS Result;

Risultato:

+----------+
| Result   |
|----------|
| January  |
+----------+

Esempio 2

In questo esempio assegno una data a una variabile, quindi utilizzo più istanze di DATEPART() per recuperare parti diverse di quella data.

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATENAME(year, @date) AS Year,
    DATENAME(quarter, @date) AS Quarter,
    DATENAME(month, @date) AS Month,
    DATENAME(dayofyear, @date) AS 'Day of Year',
    DATENAME(day, @date) AS Day,
    DATENAME(week, @date) AS Week,
    DATENAME(weekday, @date) AS Weekday;

Risultato:

+--------+-----------+---------+---------------+-------+--------+-----------+
| Year   | Quarter   | Month   | Day of Year   | Day   | Week   | Weekday   |
|--------+-----------+---------+---------------+-------+--------+-----------|
| 2018   | 2         | June    | 153           | 2     | 22     | Saturday  |
+--------+-----------+---------+---------------+-------+--------+-----------+

Esempio 3

Puoi anche recuperare le varie fasce orarie dalla data.

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATENAME(hour, @date) AS Hour,
    DATENAME(minute, @date) AS Minute,
    DATENAME(second, @date) AS Second,
    DATENAME(millisecond, @date) AS Millsecond,
    DATENAME(microsecond, @date) AS Microsecond,
    DATENAME(nanosecond, @date) AS Nanosecond;

Risultato:

+--------+----------+----------+--------------+---------------+--------------+
| Hour   | Minute   | Second   | Millsecond   | Microsecond   | Nanosecond   |
|--------+----------+----------+--------------+---------------+--------------|
| 8      | 24       | 14       | 311          | 311204        | 311204200    |
+--------+----------+----------+--------------+---------------+--------------+

Esempio 4

Puoi anche recuperare il TZoffset e il ISO_WEEK datapart.

Il TZoffset viene restituito come numero di minuti (firmato). Il ISO_WEEK datepart si riferisce al sistema di data settimanale ISO (parte dello standard ISO 8601) che è un sistema di numerazione per settimane.

DECLARE @date datetimeoffset = '2018-06-02 08:24:14.3112042 +08:00';
SELECT 
    DATENAME(TZoffset, @date) AS 'Time Zone Offset',
    DATENAME(ISO_WEEK, @date) AS 'ISO_WEEK';

Risultato:

+--------------------+------------+
| Time Zone Offset   | ISO_WEEK   |
|--------------------+------------|
| +08:00             | 22         |
+--------------------+------------+

In questo esempio, ho impostato la data su un datetimeoffset formato, che include l'offset del fuso orario. Il TZoffset viene restituito in pochi minuti.

I risultati di DATENAME() somiglierà spesso ai risultati di DATEPART() (perché la maggior parte delle parti della data è numerica). Tuttavia, DATEPART() restituisce un numero intero anziché una stringa di caratteri. Pertanto DATEPART() restituirà i mesi (e il componente del giorno della settimana) in forma numerica (ad es. 1 invece di January ).

Ottenere il nome breve del mese

Se hai bisogno del nome del mese, ma nella sua forma abbreviata di 3 lettere (ad esempio, Jan invece di January ), consulta il mio articolo 5 modi per ottenere il nome del mese breve da una data in SQL Server.