Dưới đây là ba tùy chọn để sử dụng T-SQL để trả về ngày đầu tiên của tháng trong SQL Server.
Đây có thể là ngày đầu tiên của tháng hiện tại hoặc ngày đầu tiên của tháng dựa trên một ngày nhất định.
Tùy chọn 1
Một cách để làm điều đó là như sau:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);
Kết quả:
2035-10-01
Điều này liên quan đến việc sử dụng một số hàm T-SQL để thực hiện chuyển đổi ngày nhằm đưa ngày trở lại đầu tháng.
Để biết thêm thông tin về DATEADD()
và DAY()
các hàm, xem DATEADD()
Ví dụ trong SQL Server và DAY()
Ví dụ trong SQL Server.
Tùy chọn 2
Đây là một tùy chọn khác để đón ngày đầu tiên của tháng:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);
Kết quả:
2035-10-01 00:00:00.000
Ở đây, chúng tôi đã kết hợp DATEDIFF()
vào tính toán của chúng tôi.
Mặc dù chúng tôi đã khai báo biến ban đầu là một date
giá trị, kết quả là datetime
giá trị. Chúng ta có thể sử dụng CONVERT()
hoặc CAST()
để chuyển đổi kết quả thành một date
giá trị:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);
Kết quả:
2035-10-01
Tùy chọn 3
Đây là một tùy chọn khác:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Kết quả:
2035-10-01 00:00:00.000
Tương tự như tùy chọn 2, kết quả là datetime
nhưng lần này là do chúng tôi đã khai báo biến là datetime
giá trị. Tuy nhiên, chúng tôi có thể xử lý nó tương tự để chuyển nó thành date
giá trị:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);
Kết quả:
2035-10-01
Lý do chúng tôi không khai báo biến là một date
là vì điều đó sẽ dẫn đến lỗi:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Kết quả:
Msg 206, Cấp độ 16, Trạng thái 2, Dòng 3Điều này là do chúng tôi đang cố gắng thêm một số nguyên vào
date
giá trị này không hoạt động. Tuy nhiên, thêm một số nguyên vàodatetime
giá trị hoạt động và đó là lý do tại sao chúng tôi khai báo biến làdatetime
.