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