Функция Oracle to_char с числовым форматом, имеющим произвольную точность и определенный масштаб - PullRequest
3 голосов
/ 10 февраля 2012

На самом деле это довольно просто, но я не смог найти ничего полезного.

В моем запросе SQL есть несколько округленных чисел с одним значением шкалы - round (число, 1).Если числа округлены до некоторой десятичной цифры, она печатается в формате «9,9».

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

Короче говоря, мне нужно что-то вроде, например,

to_char((select round(121.01,1), from dual), '*,1') ; для вывода 121,0.

Каков наилучший способ сделать это?Заранее спасибо

Корхан

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

Все, что вам нужно сделать, это указать количество десятичных знаков, которое вы хотите в вашем to_char. Проблема с использованием масок формата заключается в том, что вам нужно указать число чисел, которое вы хотите поставить перед десятичной точкой.

SQL> select to_char(round(121.01,1),'999.9') from dual;

TO_CHA
------
 121.0

SQL> select to_char(round(121.4,1),'999.9') from dual;

TO_CHA
------
 121.4

SQL> select to_char(round(121,1),'999.9') from dual;

TO_CHA
------
 121.0

SQL> select to_char(round(5121,1),'999.9') from dual;

TO_CHA
------
######

SQL>

Существует ряд других вариантов форматирования .

2 голосов
/ 03 февраля 2015

Этот простой запрос может вам помочь,

select to_char(round(121.01,1), '999.0') from dual;

In to_char Функция:

9 - указать, чтобы блокировать / скрыть нули в выходных данных.

0 - указать, чтобы показывать ноль на выходе в любом месте до / после десятичной точки.

Примечание:

Нет. из '9/0 в до / после десятичной точки - это количество цифр, которое вы хотите отобразить в beore / после десятичной точки.

2 голосов
/ 10 февраля 2012

Используйте 0 вместо 9 для десятичных знаков:

SELECT TO_CHAR( ROUND( 121.01, 1 ), '990D0' ) num FROM DUAL;

NUM  
------
121.0
...