2014年8月7日 星期四

DB2 語法備忘

因為DB2常跟別人的語法不一樣~
備註依有用到時更新~

@@ 限制回傳筆數 ==> limit 3
FETCH FIRST 3 ROWS ONLY

@@ 判斷null時給default值 ==> ISNULL(col, 0)
IFNULL(numcol,0)
IFNULL(strcol,'')

@@動態判斷是否要篩選條件 IFNULL(isNull)
SELECT ... FROM ...
WHERE ...
And STATUS = IFNULL('{?STATUS_P}', STATUS)
 @@CASE 應用
CASE    
     WHEN test-condition THEN value
     WHEN test-condition THEN value
     ELSE value
END    
 
@@ 動態判斷 空值->不篩選, 非空值->條件
常見大家會說用IFNULL來做,但因為用到的地方,它無法傳NULL進來,沒值是傳空字串,所以得用CASE來做
SELECT ... FROM ...
WHERE ...
And STATUS =
CASE
      WHEN '{?STATUS_P}' != '' THEN '{?STATUS_P}'
      ELSE STATUS 
END


@@ 用動態的方式,把三個條件is not null, is null, 不篩選做成一個SQL...
用CASE 來將符合條件的資料給成一個新的欄位 DATA_CHECK,符合給YES,不合給NO,然後再從中挑出DATA_CHECK='YES'的就可以成功了!其中

example:
SELECT a.* FROM (
SELECT XXX.ID, YYY.ID as ID2,
CASE
           WHEN ('{?TYPE_P}'  = '1' And YYY.ID is not Null) THEN 'YES'
           WHEN ('{?TYPE_P}' = '2' And YYY.ID is Null) THEN 'YES'
           WHEN ('{?TYPE_P}' = '0') THEN 'YES'
           ELSE 'NO'
END as DATA_CHECK,
......From XXX, YYY
Where ....
FETCH FIRST 10 ROWS ONLY ) a
WHERE a.DATA_CHECK = 'YES'

沒有留言: