Как получить точную длину длинного ди git число в Oracle - PullRequest
1 голос
/ 08 мая 2020

Я работаю со схемой (не созданной мной), в которой рассчитаны отклонения, которые могут быть очень длинными числами. Мне нужно идентифицировать эти длинные числа, чтобы я мог обработать их c. Проблема в том, что они такие длинные, что функция длины, кажется, не распознает их как длинные.

SELECT Length (10.00000000000000000000000000000000000004) FROM dual;

result: 2

Очевидно, что указанное выше число длиннее двух цифр, но функция длины этого не распознает. Как мне получить точную длину этого числа, чтобы я мог найти все случаи, в которых они существуют?

1 Ответ

3 голосов
/ 08 мая 2020

Это происходит потому, что функция length() принимает в качестве входных данных строку, а не число, поэтому значение неявно преобразуется в строку с использованием некоторого формата по умолчанию, прежде чем функция когда-либо увидит его.

Может быть более элегантное математическое решение, но одним из подходов было бы использование «текстового минимума» числовой формат , length(to_char(num,'TM')):

with demo(num) as (select 10.00000000000000000000000000000000000004 from dual)
select to_char(num)
     , to_char(num,'TM')
     , length(to_char(num,'TM'))
from   demo;

TO_CHAR(NUM)  TO_CHAR(NUM,'TM')                         LENGTH(TO_CHAR(NUM,'TM'))
------------- ----------------------------------------- -------------------------
10            10.00000000000000000000000000000000000004                        41
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...