Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server DATEPART() vs. DATENAME() – Was ist der Unterschied?

Wenn Sie mit Datumsangaben in SQL Server arbeiten, greifen Sie manchmal möglicherweise nach DATEPART() Funktion, nur um zu erkennen, dass Sie wirklich DATENAME() brauchen Funktion. Dann kann es andere Situationen geben, in denen DATEPART() ist eigentlich DATENAME() vorzuziehen .

Was ist also der Unterschied zwischen DATEPART() und DATENAME() Funktionen?

Finden wir es heraus.

Definitionen

Der Unterschied zwischen diesen beiden Funktionen liegt in ihren Definitionen:

DATEPART()
Gibt eine Ganzzahl zurück das den angegebenen datepart darstellt des angegebenen Datums .
DATENAME()
Gibt eine Zeichenkette zurück das den angegebenen datepart darstellt des angegebenen Datums

Gemäß ihrer Definition besteht der einzige Unterschied zwischen diesen beiden Funktionen im Rückgabetyp:

  • DATEPART() gibt eine Ganzzahl zurück.
  • DATENAME() gibt einen String zurück.

Das ist also der Unterschied.

In beiden Definitionen datepart ist der gewünschte Teil des Datums (z. B. Monat) und Datum ist das Datum, von dem der Datumsteil zurückgegeben werden soll.

Monats- und Tagesnamen

Das offensichtlichste Beispiel ist DATENAME() ist besser geeignet für DATEPART() ist, wenn Sie möchten, dass der Tages- oder Monatsname zurückgegeben wird.

Hier ist ein Beispiel.

DATUMNAME()

Hier ist was DATENAME() gibt zurück, wenn wir den Wochentag und den Monat von einem Datum wollen:

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

Ergebnis:

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

DATEPART()

Hier ist was DATEPART() gibt zurück:

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

Ergebnis:

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

Wenn die Ergebnisse gleich sind

In den meisten Fällen scheinen die Ergebnisse beider Funktionen gleich zu sein. Dies liegt daran, dass die meisten Datumsteile von Natur aus numerisch sind. Zum Beispiel:

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

Ergebnis:

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

Wie bereits erwähnt, gibt einer jedoch eine Ganzzahl und der andere einen String zurück.

Wir können dies anhand des folgenden Beispiels belegen:

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

Ergebnis:

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

Das Pluszeichen ist ein arithmetischer Operator für numerische Datentypen, aber es ist ein Zeichenfolgenverkettungsoperator für Zeichenfolgen.