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()
và 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.