【问题标题】:Not a valid month error in oracleoracle 中的月份错误不是有效的
【发布时间】:2015-03-31 04:32:57
【问题描述】:
SELECT c.CYCLE_OID,
SUM(CASE 
WHEN a.NAME = 'Loading' 
    THEN '1' 
ELSE '0' 
END) AS LOAD_COUNT from CYCLE c 
INNER JOIN mssolhist.CYCLEACTIVITYCOMPONENT a on a.OID = c.CYCLE_OID
WHERE c.STARTTIME_UTC >= to_date(to_char(sysdate-10,'dd-MM-yyyy')) AND     c.ENDTIME_UTC <= to_date(to_char(sysdate-5,'dd-MM-yyyy'))
GROUP BY c.CYCLE_OID 

ORA-01843: not a valid month

; nested exception is java.sql.SQLDataException: ORA-01843: not a valid month

在使用此 to_date 表达式时,我在 oracle 中收到无效月份错误。我不知道为什么?

【问题讨论】:

    标签: oracle


    【解决方案1】:

    看来有两种方法可以避免错误。

    首先,您尝试将date 转换为字符串,然后再次转换为date。你不需要这样做。直接使用日期即可。

    WHERE c.STARTTIME_UTC >= sysdate-10 AND c.ENDTIME_UTC <= sysdate-5
    

    如果要截断时间部分,请使用trunc 函数。

    WHERE c.STARTTIME_UTC >= trunc(sysdate-10) AND trunc(c.ENDTIME_UTC <= sysdate-5)
    

    或者,如果有特殊原因使用to_char,那么在尝试将字符串转换为date时最好指定日期格式。

    WHERE c.STARTTIME_UTC >= to_date(to_char(sysdate-10,'DD-MM-YYYY'), 'DD-MM-YYYY') 
      AND c.ENDTIME_UTC <= to_date(to_char(sysdate-5,'DD-MM-YYYY'), 'DD-MM-YYYY')
    

    to_date 函数有可选的fmt 参数。如果省略fmt,将使用默认格式。默认格式由NLS_TERRITORY 隐式确定,也可以由NLS_DATE_FORMAT 参数显式设置。

    【讨论】:

    • 我的原始 sql 查询在 sql developer 中通过,但当我尝试通过 jenkins 运行它时失败。
    • 也许 sql developer 和你的数据库服务器有不同的 nls_date_format 值。似乎默认格式在您的 sql 客户端中有效。但是dbms有不同的参数值导致问题。
    【解决方案2】:

    intied to_date(to_char(sysdate-10,'dd-MM-yyyy'),'dd-MM-yyyy')

    to_date(to_char(sysdate-10,'dd-mon-yyyy'),'dd-mon-yyyy')

    【讨论】:

      【解决方案3】:

      请使用以下查询,它将正常工作。

      SELECT c.CYCLE_OID,
      SUM(CASE 
      WHEN a.NAME = 'Loading' 
          THEN '1' 
      ELSE '0' 
      END) AS LOAD_COUNT from CYCLE c 
      INNER JOIN mssolhist.CYCLEACTIVITYCOMPONENT a on a.OID = c.CYCLE_OID
      WHERE c.STARTTIME_UTC >= to_date(to_char(sysdate-10,'dd-MM-yyyy'),'dd-MM-yyyy') AND     c.ENDTIME_UTC <= to_date(to_char(sysdate-5,'dd-MM-yyyy'),'dd-MM-yyyy')
      GROUP BY c.CYCLE_OID 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 2015-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多