Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server DATEPART() срещу DATENAME() – Каква е разликата?

Когато работите с дати в SQL Server, понякога може да откриете, че посягате към DATEPART() функция, само за да разберете, че това, от което наистина се нуждаете, е DATENAME() функция. Тогава може да има други ситуации, когато DATEPART() всъщност е за предпочитане пред DATENAME() .

И така, каква е разликата между DATEPART() и DATENAME() функции?

Нека разберем.

Дефиниции

Разликата между тези две функции е в техните дефиниции:

DATEPART()
Връща цяло число който представлява посочената част от дата на посочената дата .
DATENAME()
Връща низ от символи който представлява посочената част от дата на посочената дата

Според техните дефиниции, единствената разлика между тези две функции е типът връщане:

  • DATEPART() връща цяло число.
  • DATENAME() връща низ.

Така че това е разликата.

И в двете дефиниции datepart е частта от датата, която искате (напр. месец), и дата е датата, от която искате да се върне датата.

Имена на месеци и дни

Най-очевидният пример, където DATENAME() е по-подходящ за DATEPART() е когато искате името на деня или месеца да бъде върнато.

Ето един пример.

DATENAME()

Ето какво е DATENAME() връща, когато искаме деня от седмицата и месеца от дата:

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

Резултат:

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

DATEPART()

Ето какво е DATEPART() връща:

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

Резултат:

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

Когато резултатите са еднакви

В повечето случаи резултатите от двете функции ще изглеждат еднакви. Това е така, защото повечето части от датата са числови по своето естество. Например:

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

Резултат:

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

Въпреки това, както споменахме, едното връща цяло число, а другото връща низ.

Можем да видим доказателство за това със следния пример:

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

Резултат:

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

Знакът плюс е аритметичен оператор за числови типове данни, но е оператор за конкатенация на низове за низове.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конвертирате малки букви в главни в SQL Server – UPPER()

  2. ATN2() Примери в SQL Server

  3. Как да архивирате база данни на SQL сървър с помощта на T-SQL

  4. Как да зададете опцията maxrecursion за CTE вътре във функция с таблично стойност

  5. T-SQL заявка за показване на дефиниция на таблица?