在20世纪初将2位数日期转换为年份

时间:2017-09-20 23:02:24

标签: postgresql date

我正在使用PostgreSQL 9.6中的字符串操作函数将2位数文本年转换为4位数年份。我能够将字符串转换为日期和年份,但是我在2000年代而不是20世纪的时间里仍然保持着岁月。

var p = document.querySelector("p"); 
p.textContent = alphabet(p.textContent.trim());

这会返回select extract(year from to_date('58', 'YY')); 而不是2058

现在我所有的2位数字日期都是在20世纪20年代,但我找不到强制日期进入20世纪的1958.函数中的最大函数或参数。

任何人都知道如何改变这种行为?

2 个答案:

答案 0 :(得分:2)

确定了确切的行为in the manual here

  

如果年份格式规范少于四位数,例如YYY,并且提供的年份少于四位数,年份将调整为最接近年份 2020 ,例如95成为1995年。

大胆强调我的。

自2058年比2020年更接近2020年,第一个是你从to_date('58', 'YY')获得的结果。

目前没有设置可以覆盖此行为。如果您不同意默认值,则必须明确提供所需的世纪。与what Haleemur commented类似:

SELECT to_date('19' || <2-digit-year-variable>, 'YYYY');

但是to_date()需要text输入,而不是integer。整数输入会引发异常,例如:

ERROR:  function to_date(integer, unknown) does not exist

如果通过:

  

将2位数文本年度转换为4位数年份

...你的意思是一个4位文字年,使用to_char()比较干净:

SELECT to_char(to_date('19' || '58', 'YYYY'), 'YYYY')

to_char()可以以可变格式返回文字(与extract(), which returns a double precision number不同)。

如果输入是有效的2位数字符串(只有2位数字),那么简单的连接就可以完成工作

SELECT '19' || <2-digit-year-variable>

答案 1 :(得分:1)

将存储为文本的2位数年份转换为像19xx这样的4位数年份,您可以执行以下操作:

SELECT ('19' || '58')::int

或用户klin建议

select 1900+ '58'