Làm thế nào để có được ngày hiện tại mà không có phần thời gian


83

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:


119

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.

  • hôm qua: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • đầu tháng: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • cuối tháng trước: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • đầu tháng sau: 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.


1
Cung cấp liên kết là chết.
Viswanathan Iyer

6

Bạn phải chuyển đổi nó thành varchar chỉ định một mẫu định dạng (110 trong trường hợp này) sau đó chuyển đổi (hoặc truyền) trở lại datetime.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.