-1

我有以下表达

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

谢谢你们!

4

1 回答 1

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)
于 2016-07-27T10:18:10.563 回答