SQL中是否有办法有条件地使用一个或另一个值更新列?
我有这个更新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'
)
(比率,symbolId和LimitType都在运行时填写)
我想要做的是限制(没有双关语)LIMIT设置为+/- 2,147,483,647 - 即如果(符号(LIMIT)* 100 *楼层的结果(0.000001 +(符号(LIMIT)*) LIMIT * ratio / 100))或多或少,我想将其设置为+/- 2,147,483,647我可以在SQL中执行此操作吗?
这是在Oracle
中答案 0 :(得分: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')
同样在您的特定示例中,GREATEST和LEAST函数的组合也可以解决问题。