Trong SQL Server 2008 có date
kiểu dữ liệu, không có thời gian đính kèm. Do đó, bạn có thể loại bỏ phần thời gian khá dễ dàng bằng cách chuyển đổi, sau đó thực hiện DateAdd
.
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Điều này sẽ trả về một date
loại dữ liệu. Để buộc nó phải là datetime
một lần nữa, bạn có thể chỉ cần thêm một Convert
nữa :
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Bạn có thể không cần chuyển đổi rõ ràng sang datetime
, mặc dù.
Lưu ý:"Một tháng trước kể từ hôm nay" có thể được định nghĩa theo nhiều cách khác nhau. Cách nó hoạt động trong máy chủ SQL là trả về ngày của tháng trước đó là ngày gần nhất với cùng số ngày với tháng hiện tại. Điều này có nghĩa là kết quả của biểu thức này khi chạy vào ngày 31 tháng 3 sẽ là ngày 28 tháng 2. Vì vậy, bạn có thể không nhận được kết quả mong đợi trong một số trường hợp nhất định nếu bạn không suy nghĩ rõ ràng về các phân nhánh của điều này, chẳng hạn như nếu bạn thực hiện một- tính toán tháng nhiều lần, mong đợi lấy cùng một ngày trong một tháng khác (chẳng hạn như thực hiện từ tháng 3 -> tháng 2 -> tháng 1).
Xem bản trình diễn trực tiếp tại SQL Fiddle
Bản trình diễn hiển thị các giá trị và kiểu dữ liệu kết quả của mỗi biểu thức.