在DB2中删除小数点后的尾随零

时间:2014-06-03 16:43:50

标签: db2 text-parsing

我在DB2(版本:9.5.8)的标签表中有以下值

select field4 from label with ur

1.5000
0.006
9.0001
104.2500
17.0000
3.5000

是否可以使用DB2中的更新查询消除小数点后的尾随零? 如果小数点后面的所有数字都是零,我需要将其保留为.0

预期产出:

1.5
0.006
9.0001
104.25
17.0
3.5

2 个答案:

答案 0 :(得分:0)

您应该考虑将列更改为某种数字。无论如何,这是一个想法:

with t(s) as (
    values '1.5000', '0.006', '9.0001','104.2500','17.0000','3.5'
) 
select translate(rtrim(translate(s,' ','0')),'0',' ') 
    || case when translate(rtrim(translate(s,' ','0')),'0',' ') like '%.' 
       then '0' 
       else '' 
       end 
from t

1.5
0.006
9.0001
104.25
17.0
3.5

使用CTE进行翻译(rtrim(翻译('',' 0')),' 0','&# 39;)将最小化函数调用次数。

with t(s) as (values '1.5000', '0.006', '9.0001','104.2500','17.0000','3.5')
   , u(s) as ( 
        select translate(rtrim(translate(s,' ','0')),'0',' ') 
        from t 
     ) 
select s || case when s like '%.' then '0' else '' end 
from u

1.5
0.006
9.0001
104.25
17.0
3.5

答案 1 :(得分:0)

这真是太烂了,但它应该适合你。

SELECT
    trimmed || CASE WHEN LOCATE('.',trimmed) = LENGTH(trimmed) THEN '0' ELSE '' END
FROM (
    SELECT TRIM(TRAILING '0' FROM field4) AS trimmed
    FROM lablel
) A

如果小数是最后一个字符,CASE语句会重新添加一个尾随零。如果您的字符串出于任何原因包含其他小数,则会中断。如果您使用的是DB2 9.7(我在这里假设LUW),那么更好的选择是使用LOCATE_IN_STRING,当您提供负启动时,它可以从字符串的末尾开始向后工作:

SELECT
    trimmed || CASE WHEN LOCATE_IN_STRING(trimmed,'.',-1) = LENGTH(trimmed) THEN '0' ELSE '' END
FROM (
    SELECT TRIM(TRAILING '0' FROM field4) AS trimmed
    FROM lablel
) A