最近在開發的過程中遇到如下一個場景: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