sql >> Database >  >> RDS >> Sqlserver

SQL Server DATEPART() vs DATENAME() - Wat is het verschil?

Wanneer u met datums in SQL Server werkt, merkt u soms dat u naar de DATEPART() . grijpt functie, alleen om te beseffen dat wat je echt nodig hebt de DATENAME() . is functie. Dan kunnen er andere situaties zijn waarin DATEPART() is eigenlijk te verkiezen boven DATENAME() .

Dus wat is het verschil tussen de DATEPART() en DATENAME() functies?

Laten we het uitzoeken.

Definities

Het verschil tussen deze twee functies zit in hun definities:

DATEPART()
Retourneert een geheel getal dat staat voor het gespecificeerde datepart van de opgegeven datum .
DATENAME()
Retourneert een tekenreeks dat staat voor het gespecificeerde datepart van de opgegeven datum

Volgens hun definities is het enige verschil tussen deze twee functies het retourtype:

  • DATEPART() geeft een geheel getal terug.
  • DATENAME() geeft een string terug.

Dus dat is het verschil.

In beide definities, datepart is het deel van de gewenste datum (bijv. maand), en datum is de datum waarvan u het datepart wilt retourneren.

Naam van maand en dag

Het meest voor de hand liggende voorbeeld waarbij DATENAME() is meer geschikt voor DATEPART() is wanneer u wilt dat de naam van de dag of maand wordt geretourneerd.

Hier is een voorbeeld.

DATENAME()

Dit is wat DATENAME() keert terug wanneer we de weekdag en maand vanaf een datum willen:

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

Resultaat:

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

DATEPART()

Dit is wat DATEPART() retourneert:

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

Resultaat:

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

Als de resultaten hetzelfde zijn

In de meeste gevallen zullen de resultaten van beide functies hetzelfde lijken. Dit komt omdat de meeste datumdelen van nature numeriek zijn. Bijvoorbeeld:

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

Resultaat:

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

Echter, zoals vermeld, retourneert de ene een geheel getal en de andere een tekenreeks.

We kunnen daar bewijs van zien met het volgende voorbeeld:

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

Resultaat:

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

Het plusteken is een rekenkundige operator voor numerieke gegevenstypen, maar het is een tekenreeksaaneenschakelingsoperator voor tekenreeksen.


  1. MySQL PHP-incompatibiliteit

  2. Een variabele declareren in een PostgreSQL-query

  3. Hoe CAST() werkt in SQL Server

  4. Verbinding maken met SQL Server 2012 met behulp van sqlalchemy en pyodbc