SQL TO_CHAR TO_NUMBER TO_DATE

SQL TO_CHAR TO_NUMBER TO_DATE

我有以下表达式

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:invalid number format model

列在数据类型方面是一致的。 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

谢谢大家!

您可以使用 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)