SQL TO_CHAR TO_NUMBER TO_DATE

时间:2016-07-27 10:01:41

标签: sql oracle ora-01481

我有以下表达式

WHERE TO_CHAR(TO_DATE(dab.SNAPSHOT_DAY,'YYYYMMDD'),'MM') >=
      TO_CHAR(TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD'),'MM') -1

'{RUN_DATE_YYYYMMDD}' returns the date of when the data was captured.

我收到以下错误:

  

ORA-01481:无效的数字格式模型

列在数据类型方面是一致的。     dab.SNAPSHOT_DAY{DATE} 2016-07-24 00:00:00.0

你会对可能发生的事情有任何暗示吗?

我要做的是从当前和过去一个月获得结果。这就是为什么我想将两个日期转换为MONTH(MM)然后减去1.例如:

Snapshot_day = 05/JUN/2016 --> 06
RUN_DATE = 27/JUL/2016 --> 07
Comparing them: 06 >= 07 - 1 TRUE

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您可以使用trunc获取所需日期的特定部分

where trunc(dab.SNAPSHOT_DAY,'MM') >= 
    trunc(to_date('{RUN_DATE_YYYYMMDD}','YYYYMMDD'),'MM') -1

但我认为更好的解决方案是:

where snapshot_day >= add_months(to_date('{RUN_DATE_YYYYMMDD}','YYYYMMDD'),-1)

如果{RUN_DATE_YYYYMMDD}实际上是某种日期的参数:

where snapshot_day >= add_months(run_date),-1)