日期:2014-05-17  浏览次数:20824 次

一个比较复杂的时间查询
比如我有一个商品表sales,有下列的字段
salename   ---商品名
InLibDate   --生产日期
StorageLife   --保存期限,单位为年

现在我想查离有效期至多只有七天的商品(只查商品名就可以了)。

我的思路是:
1.获取系统时间
2.获取有效期的截至时间(即生产日期加上保存期限)
3.比较系统时间和有效期的截至时间相差是否小于七天。

我知道怎么查有效期的截至日期:

select   ADD_MONTHS(to_date(InLiBDate),StorageLife*12);

我也知道怎么获取系统时间
select   sysdate   from   dual;

我也知道怎么计算两个时间之间有几个月。比如计算x和y之间有几个月是这样做的:

select   MONTHS_BETWEEN(x,y);


但是该怎样才能把三者结合起来查离有效期至多只有七天的商品的商品呢?这里的七天相当于0.258个月。



------解决方案--------------------
trunc(ADD_MONTHS(to_date(InLiBDate),StorageLife*12))-trunc(sysdate) between 1 and 7
------解决方案--------------------
select * from xxx
where
(ADD_MONTHS(to_date(InLiBDate),StorageLife*12)-sysdate) < 7;
------解决方案--------------------
呵呵,两个时间一减看看有什么规律:
select sysdate-to_date( '2007-07-09 ', 'yyyy-mm-dd ') from dual
------解决方案--------------------
between -7 and 0,如果已经过期了,会查不出来。