sql-server - T-SQL 将时间(不是四舍五入)截断到最接近的分钟
问题描述
寻找最有效和最优雅的方式来将时间截断到分钟
-- 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
解决方案
正如 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);
另一种方式更直观但有点难看:
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)
);
推荐阅读
- javascript - MongoDB _id 转换为标准 Guid(NUUID)
- python - Python Sense 帽子蛇
- vim - 如何使用 coc.nvim 中的 LSP 函数像 matchit 插件一样在打开词/结束词之间跳转?
- reactjs - 以 2 位数字显示计时器,而不是一个 react-timer-hook
- python - 我如何通过让他仅在高于 minimum_range 时才输入数字来限制用户?
- flutter - 关闭应用程序时如何在 Flutter 上获取推送通知 + WebSocket?没有 FCM 或 Firebase
- flutter - Flutter - 如何从 sharedPreferences 检查字符串值
- python - 谷歌日历 api 返回不同的日期格式
- azure-logic-apps - 逻辑应用将“null”替换为“”,反之亦然
- javascript - 如何以角度将正确的json发送到后端