sql - Oracle SQL:使用 to_date 时输出错误的年份
问题描述
我正在为报告编写 Oracle SQL 语句。用户可以输入 FROM / TO 日期,我将其与已发布的行进行比较(简化):
… where changedate < to_date(user_input, 'dd.MM.YYYY')…
字段“changedate”是此表中的数据类型 DATE。
代码:
select to_date(changedate, 'dd.MM.YYYY') from TICKETSTATUS;
该字段通常包含
30.03.2019 21:50:48
但我用代码转换它的输出是:
30.03.0019
为什么这样做?我想要“2019”作为年份,但它似乎删除了前两个数字?有人可以解释并帮助我解决这个问题吗?谢谢!
解决方案
尝试通过两种类型的格式插入rrrr
并yyyy
查看年份值以查看差异:
create table ticketstatus( id int, changedate date );
insert into ticketstatus values(1,to_date('30.03.19','dd.mm.yyyy'));
insert into ticketstatus values(2,to_date('31.03.19','dd.mm.rrrr'));
select changedate
from ticketstatus;
CHANGEDATE
------------
30.03.0019
31.03.2019
实际上,您可以观察到这种多用途的情况,如下所示:
with ticketstatus(changedate) as
(
select '30.03.19' from dual
)
select to_date(changedate,'dd.mm.yyyy') date_with_yy,
to_date(changedate,'dd.mm.rrrr') date_with_rr
from ticketstatus;
DATE_WITH_YY DATE_WITH_RR
------------ ------------
30.03.0019 30.03.2019
这被称为Year 2k problem
,而年份格式rrrr
源于此问题。因此,日期格式rrrr
可用于解决此类问题。
推荐阅读
- reactjs - 错误:对象作为 React 子对象无效(找到:带有键 {_id} 的对象)。如果您打算渲染一组孩子,请改用数组
- php - 如何在 PHP7 环境中的 Google App Engine Flexible 中将 HTTP 重定向到 HTTPS?
- elasticsearch - Jenkins logstash 插件 data.buildDuration 总是 0
- javascript - 未捕获的类型错误:无法读取未定义的属性“状态”-React.js
- c# - 使用 ASP.NET Core 3.1,如何从页面 URL 中剥离 Home 控制器?
- python - 组织一个未腌制的文件python
- json - 在哈巴狗做一个迭代并给它一个限制
- windows - Windows 系统服务在端口 5357 上托管网络服务器
- c# - 如何自动实现另一个类的属性?
- python - keras.layers.Embedding 的输出形状