Есть ли способ подсчитать все конечные нули в столбце в MySQL? - PullRequest
2 голосов
/ 25 января 2020

Я хочу выяснить, есть ли способ подсчитать количество конечных нулей в столбце. Столбец состоит максимум из 13 чисел, как показано ниже, и я хочу подсчитать все нули до фактического числа, но не знаю, как это сделать go.

Example numbers
2200040000000 -- this would have the value 7
1411258181000 -- this would have the value 3

Мне удалось чтобы сделать это в Excel, но я пытаюсь сделать это непосредственно в MySQL в запросе, а не импортировать данные в Excel, а затем записать запрос как есть больше шагов к go через.

Следующее это формула:

=6+RIGHT(TEXT(B17,"0.##############E+00"),2)-LEN(TEXT(B17,"0.##############E+00"))

Я был бы очень признателен, если бы кто-то мог посоветовать, как мне решить эту проблему, поскольку это действительно помогло бы мне двигаться вперед, а не go назад и вперед с помощью Excel.

Ответы [ 2 ]

2 голосов
/ 25 января 2020

Вы можете использовать строковую функцию TRIM(), которая доступна с первых дней существования MySQL:

char_length(num) - char_length(trim(trailing '0' from num))

trim(...), удаляет трейлинг 0 s из строка; разница длинны между исходным значением и усеченным значением дает вам количество конечных 0 с в строке.

Демонстрация на DB Fiddle :

create table t (num bigint);
insert into t values (2200040000000), (1411258181000);

select 
    num,
    char_length(num) - char_length(trim(trailing '0' from num)) cnt_trailing_0s
from t;
          num | cnt_trailing_0s
------------: | --------------:
2200040000000 |               7
1411258181000 |               3
1 голос
/ 25 января 2020

Вы можете сделать это с помощью reverse() следующим образом:

select col, 
  length(col) - length(reverse(col) + 0) trailing_zeros
from tablename

замените col на фактическое имя столбца. Если в столбце есть только нули, используйте это:

length(col) - length(reverse(col) + 0)  + (col = 0) 

См. demo . Результаты:

| col           | trailing_zeros |
| ------------- | -------------- |
| 2200040000000 | 7              |
| 1411258181000 | 3              |
...