我在到期字段(日期时间)上有各种日期时间戳。每个记录的该字段中的日期时间会有所不同。例如,
2015-12-31 04:59:00:000, 2014-12-31 17:00:00:000, 2020-12-15 04:00:00:000
尝试编写查询以查找ENDING不相等的所有日期时间!=到05:00:00:000。
然后是一个更新查询,将邮票的结尾更新为05:00:00:000,保持前面不变。
一些示例更改,从 - 到:
来自:
2015-12-31 04:59:00:000, 2014-12-31 17:00:00:000, 2020-12-15 04:00:00:000
致:
2015-12-31 05:00:00:000, 2014-12-31 05:00:00:000, 2020-12-15 05:00:00:000
以下是我希望看到的内容:
UPDATE table_name
SET table_name.expire_field = keep_front_date_portion + '05:00:00.000'
WHERE table_name.expire_field = date_portion_ignore and time_portion != '05:00:00.000'
不确定如何在MS SQL 2008语法中正确编写它?
我发现了这个post,但据我所知,它需要一个不变的时间戳。
答案 0 :(得分:1)
我们可以使用DATEADD
/ DATEDIFF
重置日期时间值的时间部分
UPDATE table_name
SET expire_field =
DATEADD(day,DATEDIFF(day,'19000101',expire_field),'1900-01-01T05:00:00')
WHERE DATEPART(hour,expire_field) != 5 or
DATEPART(minute,expire_field) != 0 or
DATEPART(second,expire_field) != 0
但是你可能会发现更容易跳过WHERE
子句并让它更新整个表 - 无论如何你都无法从这里获得索引。
在DATEADD
/ DATEDIFF
对中,日期是任意的。首先,内部DATEDIFF
会询问“自some date
”以来已经过了多少天,然后DATEADD
将相同的天数添加到some date at 5am
。