数字中的尾随零的数量

时间:2018-05-10 04:49:59

标签: oracle

表格中有一列MONTHLY_SPEND,数据类型为NUMBER。我正在尝试编写一个查询,该查询将返回列中的零个数。 e.g ..

1000 will return 3
14322 will return 0
1230 will return 1
1254000.65 will return 0

我尝试使用mod操作符和10但没有预期的结果。任何帮助表示赞赏。请注意,数据库是Oracle,我们无法创建过程/函数。

3 个答案:

答案 0 :(得分:3)

select nvl(length(regexp_substr(column, '0+$')), 0) from table;

答案 1 :(得分:1)

这是查找

的一种方法
create table spend
(Monthly_spend NUMBER);

Begin 
insert into spend values (1000)

insert into spend values (14322)

insert into spend values (1230)

insert into spend values (1254000.65)

End;

此查询将针对此数据:

select  Monthly_spend,REGEXP_COUNT(Monthly_spend,0)
from spend 
where Monthly_spend not like '%.%' ;

如果还有一个像102这样的数据,如果它应该为零,那么请尝试以下查询:

select Monthly_spend,case when substr(Monthly_spend,-1,1)=0 THEN REGEXP_COUNT(Monthly_spend,0) ELSE 0 END from spend;

这是最终查询价值,如2300120或230012000

select Monthly_spend,
case when substr(Monthly_spend,-1,1)=0 and REGEXP_COUNT(trim (0 from Monthly_spend),0)<=0 THEN REGEXP_COUNT(Monthly_spend,0) 
 when REGEXP_COUNT(trim (0 from Monthly_spend),0)>0 THEN LENGTH(Monthly_spend) - LENGTH(trim (0 from Monthly_spend))
ELSE 0 END from spend;

Output :

1000        3
1254000.65  0
14322       0
1230        1
102         0
2300120     1
230012000   3

答案 2 :(得分:0)

你可以尝试这个,一个简单的解决方案。

select length(to_char(col1))-length(rtrim(to_char(col1), '0')) no_of_trailing_zeros from dual;


select length(to_char('123.120'))-length(rtrim(to_char('123.120'), '0')) no_of_trailing_zeros from dual;