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

How to update datetime field to contain only the date or time part

如何更新包含 date/time 信息的字段以仅包含数据的日期部分?类似于以下内容:

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

我还需要获取等效项以将其设置为时间组件吗?

您可以使用 CAST() 函数:

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

您可以通过转换将 TIMESTAMP 截断为 DATETIME

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

这也记录在 Firebird 2.5 语言参考 section on casts 和 Interbase 6 Embedded SQL 指南中,第 从 SQL 数据类型转换为日期时间部分datatypes(第 188 页)。可从 Firebird 网站获取该手册。

这仅适用于方言 3。如果您仍在使用方言 1 数据库,则需要使用中间转换为 VARCHAR(语言环境特定长度为 10 或 11),如 去掉时间部分。这是因为方言 1 中的 DATE 实际上是一个时间戳(而不仅仅是一个日期)。