Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Ngày giờ T-SQL được làm tròn thành phút gần nhất và giờ gần nhất với việc sử dụng các hàm

declare @dt datetime

set @dt = '09-22-2007 15:07:38.850'

select dateadd(mi, datediff(mi, 0, @dt), 0)
select dateadd(hour, datediff(hour, 0, @dt), 0)

sẽ trở lại

2007-09-22 15:07:00.000
2007-09-22 15:00:00.000

Phần trên chỉ cắt bớt giây và phút, tạo ra kết quả được yêu cầu trong câu hỏi. Như @OMG Ponies đã chỉ ra, nếu bạn muốn làm tròn lên / xuống, thì bạn có thể thêm nửa phút hoặc nửa giờ tương ứng, sau đó cắt bớt:

select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)

và bạn sẽ nhận được:

2007-09-22 15:08:00.000
2007-09-22 15:00:00.000

Trước khi kiểu dữ liệu ngày tháng được thêm vào SQL Server 2008, tôi sẽ sử dụng phương pháp trên để cắt bớt phần thời gian khỏi ngày giờ để chỉ lấy ngày. Ý tưởng là xác định số ngày giữa ngày giờ được đề cập và một thời điểm cố định trong thời gian (0 , hoàn toàn chuyển thành 1900-01-01 00:00:00.000 ):

declare @days int
set @days = datediff(day, 0, @dt)

và sau đó cộng số ngày đó vào thời điểm cố định, cung cấp cho bạn ngày ban đầu với thời gian được đặt thành 00:00:00.000 :

select dateadd(day, @days, 0)

hoặc ngắn gọn hơn:

select dateadd(day, datediff(day, 0, @dt), 0)

Sử dụng một ngày khác (ví dụ:hour , mi ) sẽ hoạt động tương ứng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để đặt chuỗi kết nối SQL Server?

  2. Cách chèn một đốm màu vào cơ sở dữ liệu bằng studio quản lý máy chủ sql

  3. Chèn dữ liệu trong SQL Server 2017

  4. Cách Chèn kết quả của một thủ tục đã lưu trữ vào một bảng tạm thời trong SQL Server

  5. Làm cách nào để tải tệp XML vào cơ sở dữ liệu bằng gói SSIS?