Количество конечных нулей в числе - PullRequest
0 голосов
/ 10 мая 2018

У меня есть столбец MONTHLY_SPEND в таблице с типом данных NUMBER.Я пытаюсь написать запрос, который будет возвращать количество нулей в столбце.например.

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

Я пытался использовать оператор мод и 10, но без ожидаемого результата.Любая помощь приветствуется.Обратите внимание, что база данных - это Oracle, и мы не можем создать процедуру / функцию.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Вот один из способов найти

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
0 голосов
/ 10 мая 2018
select nvl(length(regexp_substr(column, '0+$')), 0) from table;
0 голосов
/ 10 мая 2018

Вы можете попробовать это, простое решение.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...