1

我必须每月根据日期列从表中提取一些数据。该表每个月都会获得一些新记录,我必须编写一个查询,使用它可以获取上个月添加的记录。

查询是

   select r.iar_start_date
from reps r
where
case when (extract(month from sysdate) = 1)
  then ((extract(month from r.iar_start_date) = 12) and extract(year from r.iar_start_date) = (extract(year from sysdate) - 1))
  else (extract(month from r.iar_start_date) = (extract(month from sysdate) - 1)  and extract(year from r.iar_start_date) = extract(year from sysdate))
end

此查询给出ORA:00907: missing right parenthesis错误。

任何帮助都将是非常可观的。

4

3 回答 3

2

如果您想要的是上个月的行,那么您可以使用一些标准的日期操作技巧来实现更简单的条件:

where r.iar_start_date between trunc(add_months(sysdate,-1), 'MM') 
                       and trunc(sysdate, 'MM') - (1/86400)

ADD_MONTHS() 是一个 Oracle 内置函数,用于添加月份;使用负偏移量减去月份。

带有 'MM' 掩码的 TRUNC() 给出该月的第一天,在午夜。

我们也可以用简单的算术来调整日期。 - (1/86400)从当天减去一秒,在这种情况下产生前一天的最大日期时间值。

于 2013-07-10T05:02:06.493 回答
1
select r.iar_start_date
from reps r
where
1 = case 
      when (extract(month from sysdate) = 1)
      and  ((extract(month from r.iar_start_date) = 12) and extract(year from r.iar_start_date) = (extract(year from sysdate) - 1))
       then 1
      when (extract(month from r.iar_start_date) = (extract(month from sysdate) - 1)  
      and extract(year from r.iar_start_date) = extract(year from sysdate))
      then 1
      else 0
     end
于 2013-07-09T14:38:28.903 回答
1

你不能有这样的条件where从句。您需要重组子句,使其成为单个条件。

也许是这样的:

where
(
  extract(month from sysdate) = 1
  and
  extract(month from r.iar_start_date) = 12
  and
  extract(year from r.iar_start_date) = extract(year from sysdate) - 1
)
or
(
  extract(month from sysdate) <> 1
  and
  extract(month from r.iar_start_date) = extract(month from sysdate) - 1
  and
  extract(year from r.iar_start_date) = extract(year from sysdate)
)
于 2013-07-09T14:31:54.153 回答