如何更新日期时间字段以仅包含日期或时间部分
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
截断为 DATE
或 TIME
:
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
实际上是一个时间戳(而不仅仅是一个日期)。
如何更新包含 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
截断为 DATE
或 TIME
:
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),如 DATE
实际上是一个时间戳(而不仅仅是一个日期)。