sql >> Databáze >  >> RDS >> Sqlserver

SQL Server DATEPART() vs DATENAME() – Jaký je rozdíl?

Při práci s daty na serveru SQL se někdy může stát, že sáhnete po DATEPART() funkce, jen abyste si uvědomili, že to, co skutečně potřebujete, je DATENAME() funkce. Pak mohou nastat další situace, kdy DATEPART() je ve skutečnosti vhodnější než DATENAME() .

Jaký je tedy rozdíl mezi DATEPART()DATENAME() funkce?

Pojďme to zjistit.

Definice

Rozdíl mezi těmito dvěma funkcemi je v jejich definicích:

DATEPART()
Vrátí celé číslo která představuje zadanou část data zadaného data .
DATENAME()
Vrátí řetězec znaků která představuje zadanou část data zadaného data

Podle jejich definic je jediným rozdílem mezi těmito dvěma funkcemi návratový typ:

  • DATEPART() vrátí celé číslo.
  • DATENAME() vrátí řetězec.

To je tedy rozdíl.

V obou definicích datepart je část požadovaného data (např. měsíc) a datum je datum, ze kterého chcete datovou část vrátit.

Názvy měsíců a dnů

Nejviditelnější příklad, kde DATENAME() je vhodnější pro DATEPART() je, když chcete vrátit název dne nebo měsíce.

Zde je příklad.

DATENAME()

Zde je DATENAME() vrátí, když chceme den v týdnu a měsíc od data:

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

Výsledek:

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

DATEPART()

Zde je to, co DATEPART() vrátí:

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

Výsledek:

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

Když jsou výsledky stejné

Ve většině případů se výsledky z obou funkcí budou jevit jako stejné. Je to proto, že většina částí data je ze své podstaty číselná. Například:

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

Výsledek:

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

Jak však bylo zmíněno, jeden vrací celé číslo a druhý řetězec.

Důkaz toho můžeme vidět na následujícím příkladu:

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

Výsledek:

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

Znaménko plus je aritmetický operátor na numerických typech dat, ale je to operátor zřetězení řetězců na řetězcích.


  1. Jak vytvořit histogram v MySQL?

  2. Jak najít název omezení v PostgreSQL

  3. Jak pivotovat neznámý počet sloupců a žádný agregát na SQL Server?

  4. CodeIgniter:Nelze se připojit k vašemu databázovému serveru pomocí chybové zprávy poskytnutého nastavení