1

我们正在使用 oracle 12c 表单和报告。在其中一个查询中,用户将通过表单输入日期,下面提到的查询将获取所需的数据。

SELECT COUNT(*)
 FROM T_APPLICATION_HDR,T_APPLN_PENSIONER
 WHERE APPLN_PK=APEN_APPLN_PK
 AND APPLN_DATE <=:APPLN_DATE
 AND APPLN_SECN_ID ='PV1'
 AND APPLN_STAT='04'

我需要的是从上述查询中获取的数据将在用户输入的日期之前。我想将用户输入的日期和基于该日期填充的记录添加 10 天。

我像这样修改了上面的查询

SELECT COUNT(*)
 FROM T_APPLICATION_HDR,T_APPLN_PENSIONER
 WHERE APPLN_PK=APEN_APPLN_PK
 AND APPLN_DATE <=:APPLN_DATE+10
 AND APPLN_SECN_ID ='PV1'
 AND APPLN_STAT='04' 

它给出了这个错误

ORA-00932: inconsistent datatypes: expected DATE got NUMBER.

如何修改此查询

我像这样修改了上面的查询

SELECT COUNT(*)
 FROM T_APPLICATION_HDR,T_APPLN_PENSIONER
 WHERE APPLN_PK=APEN_APPLN_PK
 AND APPLN_DATE <=:APPLN_DATE+10
 AND APPLN_SECN_ID ='PV1'
 AND APPLN_STAT='04' 

例如,如果appln_date输入的是10-may-2019,那么查询应该在20-may-2019.

它给出了这个错误

ORA-00932: inconsistent datatypes: expected DATE got NUMBER.

如何修改此查询

4

1 回答 1

1

'10-may-2019' 不是日期,而是文本字符串。在第一种情况下,Oracle 足够聪明,可以将文本字符串转换为日期。在第一种情况下,Oracle 能够进行转换,但在第二种情况下,它会感到困惑。

我建议将您的代码更改为

SELECT COUNT(*)
 FROM T_APPLICATION_HDR,T_APPLN_PENSIONER
 WHERE APPLN_PK=APEN_APPLN_PK
 AND APPLN_DATE <= TO_DATE(:APPLN_DATE, 'DD-MON-YYYY') + INTERVAL '10' DAY
 AND APPLN_SECN_ID ='PV1'
 AND APPLN_STAT='04' 
于 2019-06-07T21:24:41.040 回答