我正在尝试确定如何将 PgSQL 中的一天转回日期。当我这样做时
select date '2013-01-01' + interval '53 days'
Run Code Online (Sandbox Code Playgroud)
我得到一个时间戳:
"2013-02-23 00:00:00"
Run Code Online (Sandbox Code Playgroud)
那么为什么当我执行以下任一操作时
select extract(date from (date '2013-01-01' + interval '53 days'))
select extract(date from (select date '2013-01-01' + interval '53 days'))
Run Code Online (Sandbox Code Playgroud)
我收到“错误:时间戳单位“日期”无法识别”?除了原因之外,我怎样才能做我想做的事,即只获取原始操作结果的日期部分?
使用
select (date '2013-01-01' + interval '53 days')::date
Run Code Online (Sandbox Code Playgroud)
或者
select cast(date '2013-01-01' + interval '53 days' as date)
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 的标准 SQL 函数“extract()” 将对时间戳进行操作,但是 a)“date”不是 extract() 的有效参数,b) 它返回子字段,而不是子字段的集合。从概念上讲,日期由三个子字段的集合组成:年、月和日。
select extract(year from current_timestamp),
extract(month from current_timestamp),
extract(day from current_timestamp),
-- Concatenate and cast to type "date".
(extract(year from current_timestamp) || '-' ||
extract(month from current_timestamp) || '-' ||
extract(day from current_timestamp))::date
Run Code Online (Sandbox Code Playgroud)