表格中有一列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,我们无法创建过程/函数。
答案 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;