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

SQL Server DATEPART() vs DATENAME() – Hvad er forskellen?

Når du arbejder med datoer i SQL Server, kan du nogle gange finde dig selv i at række ud efter DATEPART() funktion, kun for at indse, at det, du virkelig har brug for, er DATENAME() fungere. Så kan der være andre situationer, hvor DATEPART() er faktisk at foretrække frem for DATENAME() .

Så hvad er forskellen mellem DATEPART() og DATENAME() funktioner?

Lad os finde ud af det.

Definitioner

Forskellen mellem disse to funktioner ligger i deres definitioner:

DATEPART()
Returnerer et heltal der repræsenterer den angivne datepart af den angivne dato .
DATENAME()
Returnerer en tegnstreng der repræsenterer den angivne datepart af den angivne dato

Ifølge deres definitioner er den eneste forskel mellem disse to funktioner returtypen:

  • DATEPART() returnerer et heltal.
  • DATENAME() returnerer en streng.

Så det er forskellen.

I begge definitioner, datepart er den del af datoen, du ønsker (f.eks. måned), og dato er den dato, du vil have datodelen returneret fra.

Måneders og dages navne

Det mest oplagte eksempel hvor DATENAME() er mere egnet til DATEPART() er, når du ønsker, at dag- eller månedsnavnet skal returneres.

Her er et eksempel.

DATENAVN()

Her er hvad DATENAME() returnerer, når vi ønsker ugedag og måned fra en dato:

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

Her er hvad DATEPART() returnerer:

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 resultaterne er de samme

I de fleste tilfælde vil resultaterne fra begge funktioner se ud til at være de samme. Dette skyldes, at de fleste datodele i sagens natur er numeriske. For eksempel:

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

Resultat:

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

Men som nævnt returnerer den ene et heltal og den anden returnerer en streng.

Vi kan se beviser på det med følgende eksempel:

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

Resultat:

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

Plustegnet er en aritmetisk operator på numeriske datatyper, men det er en strengsammenkædningsoperator på strenge.


  1. Få resultatet af dynamisk SQL til en variabel til sql-server

  2. Hvad er forskellene mellem INSERT og UPDATE i MySQL?

  3. SQL:Få oprettet registreringer i tidsinterval for bestemte datoer

  4. Hvordan logger jeg på og godkender til Postgresql efter en ny installation?