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

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM