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中得到一个无效的月份错误。我不知道为什么?
发布于 2015-03-31 04:44:01
似乎有两种方法可以避免这个错误。
首先,您试图将date转换为string,然后再转换为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参数显式设置。
发布于 2019-03-20 11:14:57
煽动to_date(to_char(sysdate 10,‘dd-MM-yyyy“),'dd-MM-yyyy')
To_date(to_char(sysdate 10,‘“),’‘)
发布于 2015-03-31 04:51:17
请使用下面的查询,它将运行良好。
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 https://stackoverflow.com/questions/29360665
复制相似问题