我正在尝试在Oracle中执行以下SQL查询
Select round ( 123.50000065 , 4 ) from dual;
Output : 123.5
Required output: 123.5000
感谢任何帮助。 ..
答案 0 :(得分:0)
ROUND(numeric_expression,length [,function])
SELECT ROUND(123.9994, 3), ROUND(123.9995, 3);
输出:
123.9990 124.0000
答案 1 :(得分:0)
而不是round()
,请将to_char()
或cast()
用于小数类型:
select to_char(val, '999.9999'),
cast(val as decimal(10, 4))
答案 2 :(得分:0)
您可能希望将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;
答案 3 :(得分:0)
要控制显示数字的格式,可以通过应用正确的格式掩码将其强制转换为字符串。
根据您对输入值的舍入方式,其中一个可能很有用:
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
答案 4 :(得分:0)
"舍入"是一个数学概念。值(带样本输入)为123.5。数学上123.5000与123.5相同。它们与STRINGS不同。
将123.5显示为123.5000的一种方法是将round()
包裹在to_char()
中。但是,这意味着您无法在进一步的计算中使用它(实际上Oracle将允许您 - 它将隐式转换回数字而不是抛出数据类型不匹配错误,因为它应该做)。
在大多数情况下,更好的方法是解决客户端软件中的格式,例如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
答案 5 :(得分:0)
我无法看到您从查询中获得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