我尝试以下查询
SELECT TO_NUMBER(1.10)
FROM DUAL;
结果是1.1。有可能我可以使用TO_NUMBER函数而不是使用TO_CHAR函数将其显示为1.10。这是因为存储它的所有变量和游标都声明为NUMBER数据类型,我不想更改声明(因为它会影响很多包)
提前致谢!
答案 0 :(得分:0)
TO_NUMBER()将文本转换为数字。数字通常不用于显示,而是用于计算和保存的数据。
TO_CHAR()将数据转换为文本(重载函数),您可以在其中控制文本的外观。
因此,TO_NUMBER(1.10)并没有真正做任何事情,因为您要将数字转换为数字。
因此,当显示数字(不是文本)时,oracle会使用默认显示值隐式转换为文本。所以你应该总是使用to_char来控制数字的显示。
看一下这个例子:
declare
l_number number := 1.10;
l_text varchar2 (10) := '200.20';
begin
dbms_output.put_line (l_number);
dbms_output.put_line (to_char (l_number, '9D00'));
dbms_output.put_line (l_text);
dbms_output.put_line (to_number (l_text));
end;
输出:
1.1
1.10
200.20
200.2
您看到to_char为格式添加了空格填充。因此,如果您不想要,请使用 trim()。