日期格式

时间:2016-07-19 07:55:29

标签: date oracle11g

我有这样的查询

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类型。我该怎么做才能解决这个问题。

1 个答案:

答案 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)