如何更新datetime字段以仅包含日期或时间部分

时间:2016-01-15 22:35:50

标签: sql firebird

如何更新包含日期/时间信息的字段以仅包含数据的日期部分?如下所示:

update [EVENTS]
  SET [EVENT_DATE] = DATEADD(dd, 0, DATEDIFF(dd, 0, [EVENT_DATE])
  WHERE EVENT_NUM = '8592'

我还需要得到相当于将它设置为时间组件?

2 个答案:

答案 0 :(得分:5)

您可以通过投射将TIMESTAMP截断为DATETIME

cast(EVENT_DATE as DATE)
cast(EVENT_DATE as TIME)

“Interbase 6嵌入式SQL指南”中也记录了这一点,从SQL数据类型转换为datetime数据类型第182页。本手册可从Firebird网站获取。

这仅适用于方言3.如果您仍在使用方言1数据库,则需要使用中间强制转换为VARCHAR(区域设置特定长度为10或11),如{{3剥去时间部分。这是因为方言1中的DATE实际上是时间戳(而不仅仅是日期)。

答案 1 :(得分:2)

您可以使用CAST()函数:

update EVENTS
  set EVENT_DATE = cast(cast(EVENT_DATE as varchar(11)) as date)
  where EVENT_NUM = '8592'