sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server DATEPART() vs DATENAME() – Vad är skillnaden?

När du arbetar med datum i SQL Server kan du ibland komma på att du söker efter DATEPART() funktion, bara för att inse att det du verkligen behöver är DATENAME() fungera. Sedan kan det finnas andra situationer där DATEPART() är faktiskt att föredra framför DATENAME() .

Så vad är skillnaden mellan DATEPART() och DATENAME() funktioner?

Låt oss ta reda på det.

Definitioner

Skillnaden mellan dessa två funktioner ligger i deras definitioner:

DATEPART()
Returnerar ett heltal som representerar den angivna datumdelen av det angivna datumet .
DATENAME()
Returnerar en teckensträng som representerar den angivna datumdelen av det angivna datumet

Enligt deras definitioner är den enda skillnaden mellan dessa två funktioner returtypen:

  • DATEPART() returnerar ett heltal.
  • DATENAME() returnerar en sträng.

Så det är skillnaden.

I båda definitionerna, datepart är den del av datumet du vill ha (t.ex. månad) och datum är det datum du vill att datumdelen ska returneras från.

Månads- och dagnamn

Det mest uppenbara exemplet där DATENAME() är mer lämplig för DATEPART() är när du vill att dagen eller månadens namn ska returneras.

Här är ett exempel.

DATENAME()

Här är vad DATENAME() returnerar när vi vill ha veckodag och månad från ett datum:

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

Resultat:

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

DATEPART()

Här är vad DATEPART() returnerar:

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

Resultat:

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

När resultaten är desamma

I de flesta fall verkar resultaten från båda funktionerna vara desamma. Detta beror på att de flesta datumdelar är numeriska till sin natur. Till exempel:

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

Resultat:

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

Men, som nämnts, returnerar den ena ett heltal och den andra returnerar en sträng.

Vi kan se bevis på det med följande exempel:

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

Resultat:

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

Plustecknet är en aritmetisk operator på numeriska datatyper, men det är en strängsammansättningsoperator på strängar.


  1. Hur man installerar MySQL med phpMyAdmin på Ubuntu 14.04

  2. Text eller numeriskt fält – en enkel SQL-metod för att byta datatyp

  3. Hur man får en lista över alla språk i SQL Server (T-SQL)

  4. Djupdykning i NoSQL:En komplett lista över NoSQL-databaser