寻找最有效、最优雅的方式将时间截断到分钟
-- 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)
正如 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)