代码之家  ›  专栏  ›  技术社区  ›  SwapnaSubham Das

如何在Oracle SQL中将excel序列号转换为日期

  •  1
  • SwapnaSubham Das  · 技术社区  · 6 年前

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

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

    我使用以下查询

    SELECT to_date('31-12-1899','dd-mm-yyyy')+43236 FROM dual UNION ALL SELECT to_date('31-12-1899','dd-mm-yyyy')+43249 FROM dual UNION ALL SELECT to_date('31-12-1899','dd-mm-yyyy')+43238 FROM dual UNION ALL SELECT to_date('31-12-1899','dd-mm-yyyy')+43228 FROM dual UNION ALL SELECT to_date('31-12-1899','dd-mm-yyyy')+43238 FROM dual;

    我得到的结果是不正确的

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

    请帮帮我。我正在使用Oracle 11g R2。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Codo    6 年前

    你只差一点就走了。使用 1899年12月30日 )作为索引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
  •  0
  •   D-Shih    6 年前

    如果我理解正确,你可以试着用 TO_DATE 然后设定语言文化 TO_CHAR 你想要的格式。

    select TO_CHAR(TO_DATE('16-May-18','DD-Mon-YY', 'nls_date_language = american'),'DD/mm/yyyy')
    from dual
    

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

    sqlfiddle

        3
  •  0
  •   Fahmi    6 年前

    您可以在下面尝试使用to-char()函数

    select to_char(TO_date('31-12-1899', 'dd-mm-yyyy')+43236,'DD/MM/YYYY')  from dual