在 CASE 语句中使用绝对值除以两个浮点列会返回舍入值,而不是 Oracle 中的原始值

问题描述 投票:0回答:1
SELECT 
    CASE 
        WHEN ip.pricing_vol != 0 
            THEN ABS((ate.para_position / ip.pricing_vol)) 
            ELSE 0 
    AS price, 
    ip.start_date, ip.end_date
FROM 
    ab_tran_event ate, ins_price ip

para_position
pricing_vol
是数据长度为 22

的浮点列

返回的价格值四舍五入到没有小数位。 我尝试对 case 语句使用

to_char
,但出现缺少表达式错误。

sql oracle case
1个回答
0
投票
SELECT ROUND(CASE WHEN ip.pricing_vol != 0 
                THEN ABS((ate.para_position / ip.pricing_vol)) 
                ELSE 0
             END ) AS price
    ,ip.start_date
    ,ip.end_date
FROM ab_tran_event ate, ins_price ip

这会将价格四舍五入到最接近的整数。如果你想要 要四舍五入到一定数量的小数位,您可以将其添加为 ROUND 函数的第二个参数。例如,ROUND(列,2) 将四舍五入到小数点后两位。

SELECT ROUND( CASE WHEN ip.pricing_vol != 0 
                    THEN ABS((ate.para_position / ip.pricing_vol)) 
                    ELSE 0 
              END, 2 ) AS price 
        ,ip.start_date
        ,ip.end_date
FROM ab_tran_event ate, ins_price ip
© www.soinside.com 2019 - 2024. All rights reserved.