【问题标题】:date conversion from DD-MM-YYYY to yyyymm从 DD-MM-YYYY 到 yyyymm 的日期转换
【发布时间】:2014-11-05 06:57:15
【问题描述】:

以下是我尝试过的查询,但出现错误。请纠正我。

select to_char(to_date(01-03-2018, 'DD-MM-YYYY'), 'yyyymm') from dual;

遇到异常

ORA-01847: day of month must be between 1 and last day of month
01847. 00000 -  "day of month must be between 1 and last day of month"

【问题讨论】:

    标签: sql oracle11g


    【解决方案1】:
    select to_char(to_date('01-03-2018', 'DD-MM-YYYY'), 'yyyymm') from dual;
    

    TO_DATE 函数的第一个参数应该来自字符组,所以你需要使用引号。

    【讨论】:

      【解决方案2】:

      您错过了日期前后的报价。这就是甲骨文对待 01-03-2018 作为数字并将其评估为 1-3-2018 = -2020,然后尝试将 -2020 视为当前月份的天数,因为似乎不存在其他日期元素。 oracle 在你后面执行的真正查询是:

      select to_char(to_date(to_char(1-3-2018), 'DD-MM-YYYY'), 'yyyymm') from dual;
      

      正确的查询是

      select to_char(to_date('01-03-2018', 'DD-MM-YYYY'), 'yyyymm') from dual;
      

      感谢@Alex Poole 纠正了这个解释。

      【讨论】:

      • 缺少引号,而不是括号。它将01-03-2018 视为数字表达式,其计算结果为-2020;然后它会尝试将其用作当前月份的日期编号,因为似乎没有其他日期元素存在。
      • @Alex Poole 对不起我的英语。当然,我的意思是引号。你是对的,它把它当作数字。谢谢 - 我今天学到了一些新东西。我会用你的解释来纠正这个答案
      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      相关资源
      最近更新 更多