更新查询以查找和更改MS SQL DateTime的一部分

时间:2015-12-23 13:43:41

标签: sql-server sql-server-2008 tsql datetime

我在到期字段(日期时间)上有各种日期时间戳。每个记录的该字段中的日期时间会有所不同。例如,

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,但据我所知,它需要一个不变的时间戳。

1 个答案:

答案 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