Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server DATEPART () so với DATENAME () - Sự khác biệt là gì?

Khi làm việc với ngày tháng trong SQL Server, đôi khi bạn có thể thấy mình đang tìm đến DATEPART() , chỉ để nhận ra rằng thứ bạn thực sự cần là DATENAME() hàm số. Sau đó, có thể có các tình huống khác trong đó DATEPART() thực sự thích hợp hơn DATENAME() .

Vậy sự khác biệt giữa DATEPART()DATENAME() chức năng?

Hãy cùng tìm hiểu.

Định nghĩa

Sự khác biệt giữa hai chức năng này là trong định nghĩa của chúng:

DATEPART()
Trả về một số nguyên đại diện cho ngày tháng được chỉ định của ngày được chỉ định .
DATENAME()
Trả về chuỗi ký tự đại diện cho ngày tháng được chỉ định của ngày được chỉ định

Theo định nghĩa của họ, sự khác biệt duy nhất giữa hai hàm này là kiểu trả về:

  • DATEPART() trả về một số nguyên.
  • DATENAME() trả về một chuỗi.

Vì vậy, đó là sự khác biệt.

Trong cả hai định nghĩa, datepart là một phần của ngày bạn muốn (ví dụ:tháng) và ngày là ngày bạn muốn trả lại thời gian hẹn hò.

Tên Tháng và Ngày

Ví dụ rõ ràng nhất trong đó DATENAME() phù hợp hơn với DATEPART() là khi bạn muốn trả lại tên ngày hoặc tháng.

Đây là một ví dụ.

DATENAME ()

Đây là nội dung DATENAME() trả về khi chúng ta muốn ngày trong tuần và tháng kể từ ngày:

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

Kết quả:

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

DATEPART ()

Đây là nội dung DATEPART() lợi nhuận:

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

Kết quả:

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

Khi Kết quả giống nhau

Trong hầu hết các trường hợp, kết quả từ cả hai hàm sẽ giống nhau. Điều này là do bản chất của hầu hết các bộ phận ngày tháng đều là số. Ví dụ:

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

Kết quả:

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

Tuy nhiên, như đã đề cập, một trả về một số nguyên và một trả về một chuỗi.

Chúng ta có thể thấy bằng chứng về điều đó với ví dụ sau:

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

Kết quả:

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

Dấu cộng là một toán tử số học trên các kiểu dữ liệu số, nhưng nó là một toán tử nối chuỗi trên chuỗi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị rõ ràng cho cột nhận dạng trong bảng chỉ có thể được chỉ định khi danh sách cột được sử dụng và IDENTITY_INSERT BẬT SQL Server

  2. Làm cách nào để đưa các giá trị rỗng vào MIN hoặc MAX?

  3. Cách COUNT_BIG () hoạt động trong SQL Server

  4. 3 cách trả về hàng chứa ký tự chữ và số trong SQL Server

  5. Sử dụng lược đồ cơ sở dữ liệu trong SQL Server