sql - 为什么更新查询语句中日期的年份部分在年份> = 2050时更新错误年份
问题描述
我正在尝试插入/更新DATE_OF_RETIREMENT
列,但是当年份 >=2050 时,它需要 1950 年。
例子:
UPDATE EMPLOYEE
SET STATUS = '4',
ISACTIVE = 1,
DATE_OF_RETIREMENT = '30-APR-49'
WHERE ID = 2001;
这里DATE_OF_RETIREMENT
更新为30 APR 2049
.
但在以下情况下:
UPDATE EMPLOYEE
SET STATUS = '4',
ISACTIVE = 1,
DATE_OF_RETIREMENT = '30-APR-52'
WHERE ID = 2001;
此处DATE_OF_RETIREMENT
更新为30 APR 1952
.
谁能告诉我发生这种情况的原因?
解决方案
使用 4 位数字表示年份;我希望你不是想节省一些磁盘空间,是吗?Y2K 落后了我们 20 年。
查看多年来RR
和格式掩码之间的区别。YY
根据它(年份)是在本世纪第 50 年之前还是之后,您会得到不同的结果。
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> select to_date('30-04-49', 'dd.mm-rr') val1_rr,
2 to_date('30-04-49', 'dd.mm-yy') val2_yy,
3 --
4 to_date('30-04-52', 'dd.mm-rr') val3_rr,
5 to_date('30-04-52', 'dd.mm-yy') val4_yy
6 from dual;
VAL1_RR VAL2_YY VAL3_RR VAL4_YY
---------- ---------- ---------- ----------
30.04.2049 30.04.2049 30.04.1952 30.04.2052
SQL>
推荐阅读
- javascript - 选择选项不会在 Vue JS 中使用选择的插件和 API 更新
- python - 在 Django 中序列化关系
- android - 如何使用jetpack compose将按钮标记为可选
- android - 由于在应用程序安装期间超时而无法运行排毒测试
- hibernate - 休眠查询:通过映射键加入
- android - 以预定的时间间隔在本机反应中调用休息 API
- java - 用于逐步添加字符串填充的循环?
- c# - CS0122:“AmazonGlacierClient.ListVaults()”因其保护级别而无法访问
- swift - 将 SwiftUI 2.0 应用程序连接到 Firebase 时出错
- hash - 具有自适应哈希函数的哈希表