我有这样的查询
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类型。我该怎么做才能解决这个问题。
答案 0 :(得分:0)
此功能
TO_DATE(:ST_DATE,'DD/MM/YYYY')
尝试使用指定的格式将字符串:st_date转换为日期' DD / MM / YYYY'。如果您以其他格式输入日期(' dd-mon-yyyy'),您将获得ORA-01843。要避免此错误,仍然以所需格式显示日期 使用' DD-MON-YYYY'在TO_DATE功能和' DD / MM / YYYY'在TO_CHAR函数中
另外
ADD_MONTHS(:ST_DATE, -1)
将尝试使用您的会话设置将st_date隐式转换为日期。我建议使用显式转换:
ADD_MONTHS(TO_DATE(:ST_DATE, 'DD-MON-YYYY'),-1)