我正在使用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.
函数中的最大函数或参数。
任何人都知道如何改变这种行为?
答案 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'