- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 PostgreSQL 9.6 中的字符串操作函数将 2 位数的文本年份转换为 4 位数的年份。我能够将字符串转换为日期和年份,但我一直在 2000 年代而不是 1900 年代。
select extract(year from to_date('58', 'YY'));
这将返回 2058
而不是 1958。
现在我所有的 2 位数日期都在 1900 年代,但我在 to_date()
函数中找不到将日期强制为 1900 年代的 max 函数或参数。
有人知道如何改变这种行为吗?
最佳答案
确切的行为已定义in the manual here :
If the year format specification is less than four digits, e.g.
YYY
, and the supplied year is less than four digits, the year will be adjusted to be nearest to the year 2020, e.g.95
becomes 1995.
大胆强调我的。
由于 2058 年比 1958 年更接近 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
如果通过:
convert a 2-digit text year into a 4 digit year
...你的意思是 4 位数字 text 年份,使用 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>
关于postgresql - 将 2 位数日期转换为 1900 年代的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46332965/
我正在预处理数据,一列代表日期,例如“6/1/51” 我正在尝试将字符串转换为日期对象,到目前为止我拥有的是: date = row[2].strip() format = "%m/%
这个问题在这里已经有了答案: How to change the base date for parsing two letter years with Java 8 DateTimeFormatt
我是一名优秀的程序员,十分优秀!