【问题标题】:Oracle Error in date formatOracle 日期格式错误
【发布时间】:2016-07-19 16:14:29
【问题描述】:

我有这样的查询

SELECT ITEM_CODE FROM my_table WHERE JOB_DATE BETWEEN

 CASE WHEN EXTRACT(MONTH FROM TO_DATE(:ST_DATE,'DD/MM/YYYY')) = EXTRACT ( MONTH FROM TO_DATE(:END_DATE,'DD/MM/YYYY')) THEN TO_CHAR(ADD_MONTHS(:ST_DATE,-1),'DD/MM/YYYY')

   WHEN EXTRACT(MONTH FROM TO_DATE(:ST_DATE,'DD/MM/YYYY')) != EXTRACT ( MONTH FROM TO_DATE(:END_DATE,'DD/MM/YYYY')) THEN   TO_CHAR(TRUNC(ADD_MONTHS(:ST_DATE,-1),'MONTH'),'DD/MM/YYYY') END 

   AND

CASE WHEN EXTRACT(MONTH FROM TO_DATE(:ST_DATE,'DD/MM/YYYY')) = EXTRACT ( MONTH FROM TO_DATE(:END_DATE,'DD/MM/YYYY')) THEN     TO_CHAR(ADD_MONTHS(:END_DATE,-1),'DD/MM/YYYY')

    WHEN EXTRACT(MONTH FROM TO_DATE(:ST_DATE,'DD/MM/YYYY')) != EXTRACT ( MONTH FROM TO_DATE(:END_DATE,'DD/MM/YYYY')) THEN TO_CHAR(LAST_DAY(ADD_MONTHS(:ST_DATE,-1)),'DD/MM/YYYY') END

我以默认格式“dd-mon-yyyy”输入日期,并希望在报告中显示“DD/MM/YYYY”。 但这给了我错误

ORA-01843: not a valid month

在表Job_date 中存储为DATE 类型。我该怎么做才能解决这个问题。

【问题讨论】:

    标签: date oracle11g


    【解决方案1】:

    这个函数

    TO_DATE(:ST_DATE,'DD/MM/YYYY')
    

    尝试使用指定格式 'DD/MM/YYYY' 将字符串 :st_date 转换为日期。如果您以另一种格式 ('dd-mon-yyyy') 输入日期,则会得到 ORA-01843。为避免此错误并仍以所需格式显示日期 在 TO_DATE 函数中使用“DD-MON-YYYY”,在 TO_CHAR 函数中使用“DD/MM/YYYY”

    还有

    ADD_MONTHS(:ST_DATE, -1)
    

    将尝试使用您的会话设置将 :st_date 隐式转换为日期。我建议使用显式转换:

    ADD_MONTHS(TO_DATE(:ST_DATE, 'DD-MON-YYYY'),-1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多