T-SQL 将时间截断(不四舍五入)到最接近的分钟

Jas*_*ner 1 t-sql sql-server

寻找最有效、最优雅的方式将时间截断到分钟

-- I need to truncate the time to the minute, 
-- this code almost works but rounds up 
SELECT
    CAST('2021-09-02T15:15:30.9233333' AS datetime2(7)) AS EventDatetime2,
    CAST(CAST('2021-09-02T15:15:30.9233333' AS datetime2(7)) AS TIME(0)) AS EventTime
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

正如 Larnu 发布的那样,如果您想根据秒值向上或向下舍入,只需将其简单转换为smalldatetime即可。

如果你想截断,有几种方法,最简单的可能就是在午夜添加分钟(仅发布,因为我更喜欢没有像 1900-01-01 这样的神奇日期):

DECLARE @dt datetime2(7) = '2021-09-02T15:15:30.9233333';
DECLARE @d  datetime2(7) = CONVERT(date, @dt);

SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, @d, @dt), @d);
Run Code Online (Sandbox Code Playgroud)

另一种方法更直观,但有点难看:

DECLARE @dt datetime2(7) = '2021-09-02T15:15:30.9233333';

SELECT SMALLDATETIMEFROMPARTS
(
  DATEPART(YEAR,   @dt), 
  DATEPART(MONTH,  @dt), 
  DATEPART(DAY,    @dt), 
  DATEPART(HOUR,   @dt), 
  DATEPART(MINUTE, @dt)
);
Run Code Online (Sandbox Code Playgroud)