Я пытаюсь выполнить следующий SQL запрос в OracleКак округлить число, включая наименее значимые нули?
Select round (123.50000065 , 4) from dual;
Output : 123.5
Required output: 123.5000
Любая помощь приветствуется. ..
Я пытаюсь выполнить следующий SQL запрос в OracleКак округлить число, включая наименее значимые нули?
Select round (123.50000065 , 4) from dual;
Output : 123.5
Required output: 123.5000
Любая помощь приветствуется. ..
ROUND (numeric_expression, длина [функция])
SELECT ROUND(123.9994, 3), ROUND(123.9995, 3);
Выход:
123,9990 124,0000
Вместо round()
, использовать to_char()
или cast()
в десятичный тип:
select to_char(val, '999.9999'),
cast(val as decimal(10, 4))
You proba Блай хотите использовать to_char
с required format:
Ниже округляет значение до 4 знаков после запятой и форматов в нужной строке:
Select to_char(123.50000065, '999999999990D9999') x from dual;
Если вы не хотите, чтобы на самом деле вокруг числа т.е. вы просто хотите усечение после 4-х цифр, используйте:
Select to_char(trunc(123.50000065, 4), '999999999990D9999') x from dual;
для управления форматом число предъявляется, вы можете преобразовать его в строку, применяя правильную маску формата.
В зависимости от того, как вам нужно вокруг вашей входного значения, один из них может быть полезно:
with test(x) as (
select 123.50000065 from dual union all
select 123.00004 from dual union all
select 123.00005 from dual union all
select 123.00008 from dual
)
select x,
to_char(x, 'FM99999999.0000'),
to_char(trunc(x, 4), 'FM99999999.0000')
from test ;
результат:
X TO_CHAR(X,'FM9 TO_CHAR(TRUNC(
-------------------------- -------------- --------------
123,50000065000 123.5000 123.5000
123,00004000000 123.0000 123.0000
123,00005000000 123.0001 123.0000
123,00008000000 123.0001 123.0000
"Округление" является математическое понятие. Значение (с вашим вводом образца) составляет 123,5. Математически 123.5000 - это то же самое, что и 123.5. Они отличаются только от STRINGS.
Один из способов отображения 123.5 как 123.5000 - обернуть round()
в пределах to_char()
. Однако это означает, что вы не можете использовать его в дальнейших вычислениях (на самом деле Oracle позволит вам это сделать - он будет делать неявное преобразование обратно в число вместо того, чтобы метать ошибку несоответствия типа данных, так как он должен do).
Лучшим способом, в большинстве случаев, является обращение к форматированию в вашем клиенте, например, SQL Developer, SQL * Plus или Toad. Вот как вы можете сделать это в SQL * Plus:
SQL> Select round (123.50000065 , 4) as result from dual;
RESULT
----------
123.5
-- change the format of the numeric column "result"
SQL> column result format 999.0000
SQL> Select round (123.50000065 , 4) as result from dual;
RESULT
---------
123.5000
Я не могу видеть, как вы получили 123.5
из вашего запроса. мои результаты 123.50000000
Если я правильно понял, вы хотите, чтобы ваш номер 4 значительных десятичных знаков. почему бы не попробовать cast
select cast(123.50000065 as numeric(38,4))
выход: 123.5000
тестирование, если он округляет номер:
select cast(123.50000065 as numeric(38,6))
выход: 123.500001
Что бы иметь для 123.00005, 123,00004, 123,00008? – Aleksej