Есть ли способ подсчитать все конечные нули в столбце в MySQL?

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

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

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

Ниже приведена формула:

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

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


person Michael Owen    schedule 24.01.2020    source источник
comment
Помните, что СУБД предназначена для хранения и извлечения данных, и не более того, поэтому, хотя вы можете сделать что-то подобное в СУБД, это может быть не лучшим вариантом.   -  person Strawberry    schedule 25.01.2020


Ответы (2)


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

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

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

Демонстрация скрипта БД:

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
person GMB    schedule 24.01.2020

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

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

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

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

См. демонстрацию.
Результаты:

| col           | trailing_zeros |
| ------------- | -------------- |
| 2200040000000 | 7              |
| 1411258181000 | 3              |
person forpas    schedule 24.01.2020
comment
Спасибо GMB и forpas, посмотрю оба и дам вам знать, как у меня дела. - person Michael Owen; 25.01.2020
comment
Оба ответа дают мне то, что я хотел, так что большое спасибо, поставил галочку GMB из-за объяснения. - person Michael Owen; 25.01.2020