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

DATENAME() Eksempler i SQL Server

I SQL Server, T-SQL DATENAME() funktion returnerer en tegnstreng, der repræsenterer den angivne datodel af den angivne dato . Du kan f.eks. sende 2021-01-07 og lad SQL Server kun returnere månedsdelen (January ).

Returtypen for DATENAME() er nvarchar .

Eksempler nedenfor.

Syntaks

DATENAME() syntaks ser sådan ud:

DATENAME ( datepart , date )

Hvor datepart er den del af date (en dato- eller tidsværdi), som en tegnstreng vil blive returneret for.

Eksempel 1

Her er et grundlæggende eksempel, hvor jeg returnerer månedskomponenten fra en dato.

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

Resultat:

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

Eksempel 2

I dette eksempel tildeler jeg en dato til en variabel, så bruger jeg flere forekomster af DATEPART() for at hente forskellige dele af den dato.

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;

Resultat:

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

Eksempel 3

Du kan også hente de forskellige tidsdele fra datoen.

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;

Resultat:

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

Eksempel 4

Du kan også hente TZoffset og ISO_WEEK datepart.

 TZoffset returneres som antal minutter (underskrevet). ISO_WEEK datepart refererer til ISO uge-dato-systemet (en del af ISO 8601-standarden), som er et nummereringssystem for uger.

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';

Resultat:

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

I dette eksempel satte jeg datoen til en datetimeoffset format, som inkluderer tidszoneforskydningen. TZoffset returneres på få minutter.

Resultaterne af DATENAME() vil ofte ligne resultaterne fra DATEPART() (på grund af de fleste datodele er numeriske). Dog DATEPART() returnerer et heltal i modsætning til en tegnstreng. Derfor DATEPART() returnerer måneder (og ugedagskomponenten) i numerisk form (f.eks. 1 i stedet for January ).

Få det korte månedsnavn

Hvis du har brug for månedsnavnet, men i dets forkortede 3-bogstavs forkortelsesform (f.eks. Jan i stedet for January ), tjek min artikel 5 måder at få det korte månedsnavn på fra en dato i SQL Server.


  1. Den korrekte måde at implementere en unik begrænsning, der tillader flere NULL-værdier i SQL Server

  2. Liste over SQL Server Comparison Operators

  3. Sådan oprettes VARRAY'er som databaseobjekt i Oracle-databasen

  4. Hvordan rettes Ora-01427 enkeltrækkes underforespørgsel returnerer mere end én række i udvalgte?