sql - 如何将 Excel 序列日期数字转换为 Oracle SQL 中的日期

标签 sql oracle oracle11g

我试图将相同的 Excel 日期格式转换为 dd/mm/yyyy 格式。但我没有得到正确的结果。

43236   16-May-18
43249   29-May-18
43238   18-May-18
43228   8-May-18
43238   18-May-18

我正在使用以下查询

从双选择 to_date('31-12-1899','dd-mm-yyyy')+43236 联合所有 从双选择 to_date('31-12-1899','dd-mm-yyyy')+43249 联合所有 从双选择 to_date('31-12-1899','dd-mm-yyyy')+43238 联合所有 从双选择 to_date('31-12-1899','dd-mm-yyyy')+43228 联合所有 从双中选择 to_date('31-12-1899','dd-mm-yyyy')+43238;

我得到以下不正确的结果

17-MAY-18
30-MAY-18
19-MAY-18
09-MAY-18
19-MAY-18

请帮我解决这个问题。我使用的是 Oracle 11g R2。

最佳答案

您只是落后了 1。使用1899 年 12 月 30 日(而不是1899 年 12 月 31 日)作为索引 0 的引用日期。

SELECT to_date('31-12-1899','dd-mm-yyyy') + 43236 FROM dual

之所以是 1899 年 12 月 30 日而不是 1900 年 1 月 1 日,有两个原因:

  1. 在 Excel 中,1900 年 1 月 1 日保存为 1(而不是 IT 人员期望的 0)。
  2. Excel 将 1900 年视为闰年,尽管事实并非如此。因此,Excel 中还有 1900 年 2 月 29 日的数字,但该数字并不存在。

关于sql - 如何将 Excel 序列日期数字转换为 Oracle SQL 中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53204725/

相关文章:

mysql - 如何仅将数据分配给具有特定角色的用户?

mysql - 1 个表的 3 个外键

MySQL 从具有规范的文本列中选择

oracle - 无法停止/删除 DBMS_SCHEDULER 中的作业

oracle11g - 如何更新 ORA-01000 : maximum open cursors exceed 的游标限制

sql - MySql:让这个查询更快……有办法吗?第二部分

Java、Oracle db - trunc(nvl) 从日期时间对象中删除时间戳后出现时区问题

c# - DataAdapter.Fill() 在加载大的十进制值时抛出溢出异常

sql - 如何在Oracle中计数后选择最大值?

Oracle selectsequence.nextval from Dual 听起来太慢