oracle查询时根据查询的时间字段改变状态字段的值
最近在开发的过程中遇到如下一个场景:oracle数据库商品表里面有商品的下线时间字段shelf_time 和状态字段 goods_statu,有个定时任务定时扫描商品表,如果当前商品状态为1(上线状态)且下线时间小于当前时间就改变商品的为0(下线状态),但定时任务不能保证实时性,所以在查询语句要加上这个逻辑判断,下面为解决方案
select decode(
(CASE WHEN
(shelf_time < sysdate AND goods_status = '1' ) THEN -1
END ),-1,0,goods_status) as goods_status
from T_GOODS
用到oracle 的 decode 和 CASE 函数结合完美把问题解决。
decode 函数的基本用法如下:
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
CASE 函数的基本用法如下:
case shelf_time
when shelf_time < sysdate THEN -1
when shelf_time = sysdate THEN 0
else 1 end