1

我正在尝试输入用户的日期值,然后在查询中使用该值。

 select * from  TB_MNP_GTY_TRANS_STEPS where CREATE_DATETIME>=&startdate

现在,当我在 Toad 中运行 sql 语句并输入 8/1/2012 作为日期数据类型时,我得到

ORA-00932: 不一致的数据类型: 预期的 DATE 得到了 NUMBER

有人可以建议我错在哪里。注意 CREATE_DATETIME 是日期类型。

4

2 回答 2

2

您应该真正指定您在参数中使用的日期格式:

SELECT *
  FROM TB_MNP_GTY_TRANS_STEPS 
 where CREATE_DATETIME >= TO_DATE(&startdate, 'DD/MM/YYYY');

在此处阅读有关日期格式的信息

当前,您的会话期望日期为其默认 NLS_DATE 默认格式,显然您输入的日期格式不同。显式指定日期格式可防止发生此问题。

希望能帮助到你...

编辑: 如果您想在 2012 年 1 月 8 日通过,那么您可以将变量值指定为:

08/01/2012

你的选择是:

SELECT *
  FROM TB_MNP_GTY_TRANS_STEPS 
 where CREATE_DATETIME >= TO_DATE(&startdate, 'DD/MM/YYYY');

根据您的环境,您可能需要将变量用单引号括起来(对于 TOAD,您肯定会这样做),即

SELECT *
  FROM TB_MNP_GTY_TRANS_STEPS 
 where CREATE_DATETIME >= TO_DATE('&startdate', 'DD/MM/YYYY');

您收到的错误是由于您输入的日期字符串的格式与您指定的格式不完全匹配(请参阅日期和月份之前的开头“ ” !081

于 2012-08-01T12:50:30.393 回答
1

需要日期转换

select * from  TB_MNP_GTY_TRANS_STEPS where CREATE_DATETIME>=to_date(&startdate, 'MM-DD-YYYY')

在传递参数时,您应该将 quoets 中的值传递为 '08-09-1999'

于 2012-08-01T12:51:25.260 回答