PostgreSQL 9.5版本中是否有内置函数来计算适当的世纪/千年?
当我从表中使用birth_date :: TIMESTAMP时,有时它前缀为19,有时它是前缀20.下面的例子
输入:
28JUN80
25APR48
输出:
"1980-06-28 00:00:00"
"2048-04-25 00:00:00"
我还在表格中有记录,其中birth_date保持值为" 07APR1963"它被恰当地计算为" 1963-04-07 00:00:00"。
当长度为7个字符时,我需要使用CASE语句,然后前缀为19千字节,当它的9个字符时,只需按原样加载它。
答案 0 :(得分:0)
https://en.wikipedia.org/wiki/Unix_time Unix纪元
开始(1970年1月1日00:00:00)
因此,如果你没有指定世纪,但只是最后YY
它将是00:00:00 1 January
之前的20世纪和YY
等于70
之前的21世纪。如果你想让它猜测20世纪就像你一样追加年份,或指定CC
,例如:
t=> select
to_timestamp('1JAN70', 'ddmonYY')
, to_timestamp('31DEC69', 'ddmonyy')
, to_timestamp('31DEC69 20', 'ddmonyy cc');
to_timestamp | to_timestamp | to_timestamp
------------------------+------------------------+------------------------
1970-01-01 00:00:00+00 | 2069-12-31 00:00:00+00 | 1969-12-31 00:00:00+00
(1 row)
https://www.postgresql.org/docs/current/static/functions-formatting.html
在从字符串到时间戳或日期的转换中,CC(世纪) 如果存在YYY,YYYY或Y,YYY字段,则忽略该字段。如果使用CC 如果是YY或Y,则将年份计算为指定年份 世纪。如果指定世纪但年份不是,那么第一个 假定这个世纪的一年。
<强>更新强>
所以在你的情况下,你应该做像:
vao=# create table arasu (member_birth_date character(9)); insert into arasu values ('28JUN80'),('25APR48');
CREATE TABLE
INSERT 0 2
vao=# select to_timestamp(member_birth_date||' 20', 'ddmonYY cc') from arasu;
to_timestamp
------------------------
1980-06-28 00:00:00+03
1948-04-25 00:00:00+03
(2 rows)