2014-02-12 29 views
0

SQL中是否有方法用一個或另一個值有條件地更新列?有條件地使用SQL更新列(在Oracle中)

我有這樣的更新SQL(轉述):

UPDATE LMPROC_LIMITS 
    SET LIMIT = sign(LIMIT) * 100 * floor(0.000001 + (sign(LIMIT) * LIMIT * ratio/100) 
WHERE SYMBOL_ID = symbolId 
    AND CLASSTYPE = LimitType 
    AND TYPE_ IN (
       'minClusterPosition', 
       'maxClusterPosition', 
       'minProductPosition', 
       'maxProductPosition', 
       'minBookPosition', 
       'maxBookPosition', 
       'maxShortShares' 
       ) 

(比,符號ID,並LimitType所有在運行時填寫)

我想要做的是限制(沒有雙關語意)值LIMIT被設置爲+/- 2,147,483,647,即如果(符號(LIMIT)* 100 * floor(0.000001 +(符號(LIMIT)* LIMIT * ratio/100))的結果大於或小於該值,我想將其設置爲+/- 2,147,483,647我可以在SQL中執行此操作嗎?

這是在Oracle中的

+1

你可以做一個CASE語句 – OlleR

+0

你的問題不是很清楚,但你可以在sql中使用'case'來實現條件更新。 – San

回答

3

您可以使用CASE語句:

update LMPROC_LIMITS 
set LIMIT = 
    case 
    when sign(LIMIT) * 100 * floor(0.000001 + (sign(LIMIT) * LIMIT * ratio/100) > 2147483647 then 2147483647 
    when sign(LIMIT) * 100 * floor(0.000001 + (sign(LIMIT) * LIMIT * ratio/100) < -2147483647 then - 2147483647 
    else sign(LIMIT) * 100 * floor(0.000001 + (sign(LIMIT) * LIMIT * ratio/100) 
    end  
where SYMBOL_ID = symbolId 
and CLASSTYPE = LimitType 
and TYPE_ in ('minClusterPosition', 'maxClusterPosition', 
'minProductPosition', 'maxProductPosition', 'minBookPosition', 
'maxBookPosition', 'maxShortShares') 

另外,在最大和最小功能的特定實例組合會做的伎倆也。

+0

謝謝 - 這對我很有用,但現在需求已稍有改變 - 我必須在程序中知道我將LIMIT設置爲+/- 2147483647,在這種情況下我需要採取一些其他的編程操作。沒有多次查詢,我不明白我能做到這一點。 –

+0

有人指出我在'返回'條款 - 看起來就像我需要的。 –