sql - 截断时间戳
问题描述
我想进入一个存储过程,在最高小时或最低小时截断时间戳输入值。
例如,如果我的输入值为2020-02-12 06:56:00
and 2020-02-12 07:14:00
,我想将其转换为2020-02-12 06:00:00
and2020-02-12 08:00:00
强制转换函数可以工作吗?
解决方案
您可以从您想要的原始日期时间部分构建新的日期时间。
declare @start datetime = '2020-02-12 06:56:00'
declare @end datetime = '2020-02-12 07:14:00'
select @start as OriginalStart,
@end as OriginalEnd,
datetimefromparts(year(@start), month(@start), day(@start), datepart(hour, @start), 0, 0, 0) as TruncatedStart,
dateadd(hour, 1, datetimefromparts(year(@end), month(@end), day(@end), datepart(hour, @end), 0, 0, 0)) as TruncatedEnd
间隔的第一个截断是较低的小时,第二个截断增加一个额外的小时,因此它返回较高的小时。
PS:如果您想要四舍五入到最接近的小时,那么您可以添加 30 分钟并截断:
declare @date datetime = '2020-02-12 06:56:00'
set @date = dateadd(minute, 30, @date)
select datetimefromparts(year(@date), month(@date), day(@date), datepart(hour, @date), 0, 0, 0) as NearestHour
或一步(使用 Lepetit 的截断快捷方式):
declare @date datetime = '2020-02-12 06:56:00'
select dateadd(hour, datediff(hour, 0, dateadd(minute, 30, @date)), 0) AS NearestHour
推荐阅读
- vba - 什么是使用访问 vba 的最佳事件
- python - Python字符串出现计数正则表达式性能
- json - 如何从 Ionic 3 中的 JSON 对象获取不是 URL 的图标值
- python - 无法在 x86 docker 上安装 python for arm
- amazon-web-services - 如何在自动缩放组中使用更新/新的 AMI
- php - 当用户在 PHP 中注册 WordPress 时,如何创建自定义用户角色?
- mysql - MySQL:是否可以创建一个查询来评估来自不同记录的数据?
- reactjs - 将轮播项目移动到不同的类不起作用 [反应]
- angular - 使用角度 11 在 ts 文件中导入样式
- git - 如何从 GitHub 获取最新版本的代码?