Trong SQL Server 2005, làm cách nào để có được ngày hiện tại mà không có phần thời gian? Tôi đã và đang sử dụng GETDATE()
nhưng muốn nó có thời gian 00: 00: 00.0
Trong SQL Server 2005, làm cách nào để có được ngày hiện tại mà không có phần thời gian? Tôi đã và đang sử dụng GETDATE()
nhưng muốn nó có thời gian 00: 00: 00.0
Câu trả lời:
Các nhanh nhất nếu bạn có để lặp qua một recordset và không có thời gian trong SQL Server 2008
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Hai câu trả lời khác nhau và xuất sắc trên StackOverflow cho thấy điều này: Một , Hai
Chuyển đổi Varchar là một trong những cách tồi tệ nhất để làm điều đó. Tất nhiên, đối với một giá trị có thể không quan trọng nhưng đó là một thói quen tốt để tham gia.
Cách này cũng mang tính quyết định, giả sử nếu bạn muốn lập chỉ mục một cột được tính toán. Ngay cả những người viết sách về SQL Server cũng bị cuốn theo chuyển đổi datetime
Kỹ thuật này cũng có thể mở rộng.
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
Biên tập:
Như tôi đã đề cập về tính xác định, các phương pháp varchar không an toàn trừ khi bạn sử dụng kiểu 112.
Các câu trả lời khác ở đây chỉ ra rằng bạn sẽ không bao giờ áp dụng điều này cho một cột. Điều này là chính xác, nhưng bạn có thể muốn chọn một hàng 100k hoặc thêm một cột được tính toán hoặc NHÓM theo ngày. Sau đó, bạn phải sử dụng phương pháp này.
Câu trả lời khác cũng đề cập đến phong cách 110. Đây không phải là ngôn ngữ hoặc SET DATEFORMAT an toàn và thất bại với cài đặt ngôn ngữ "người Anh". Xem hướng dẫn cuối cùng về các kiểu dữ liệu datetime của Tibor Karaszi.