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.