【发布时间】:2020-07-01 17:57:03
【问题描述】:
我在从 oracle SQL 表中插入和查询数据时遇到了一些问题。我的表名是 Table_Name 它有两个列名(id 号,密码 varchar2)。我很好地进行了插入操作,但是当我查询数据时,它是“1.14662E+10”这种格式。 那么问题出在哪里?
【问题讨论】:
我在从 oracle SQL 表中插入和查询数据时遇到了一些问题。我的表名是 Table_Name 它有两个列名(id 号,密码 varchar2)。我很好地进行了插入操作,但是当我查询数据时,它是“1.14662E+10”这种格式。 那么问题出在哪里?
【问题讨论】:
在 SQL*Plus 中,您可以设置列的格式以显示列的内容。对于你的情况,你需要这样的东西:
column your_column_name format 9999999999
上述命令中9的个数应该是你的列最大值的位数。
见下面的例子(ROWNM 专栏):
SQL> select * from T;
ROWNM NAME TOTAL COLUMN1
---------- ---------- ---------- ----------
1.2346E+17 Tejash ########## test
SQL> column rownm format 999999999999999999
SQL>
SQL> select * from T;
ROWNM NAME TOTAL COLUMN1
------------------- ---------- ---------- ----------
123456789123456789 Tejash ########## test
SQL>
【讨论】:
数据已正确存储,这只是客户端程序(此处为 SQL*Plus)显示数据的方式的问题。
正如已经回答的,您可以使用 SQL*Plus 格式化命令或使用 TO_CHAR 函数:
SQL> select x from t;
X
----------
1
1234567890
1.2346E+19
SQL> select to_char(x) from t;
TO_CHAR(X)
------------------------------------------------------------------------------------------------------------------------
1
1234567890
12345678901234567890
SQL>
【讨论】:
如果您有多个大量列并且不想将它们全部设置为column,则可以使用 SQL*Plus(以及 SQLcl 和 SQL Developer)的另一个技巧。数字有一个默认的显示宽度,超出该大小,格式将更改为科学计数法;但你可以改变它:
SQL> show numwidth
numwidth 10
SQL> select 12345, 123456789123456789 from dual;
12345 123456789123456789
---------- ------------------
12345 1.2346E+17
SQL> set numwidth 20
SQL> select 12345, 123456789123456789 from dual;
12345 123456789123456789
-------------------- --------------------
12345 123456789123456789
SQL>
如您所见,它会影响所有数字列,即使是较小的数字也是如此 - 因此它是一种更广泛的方法,并且比单独的 column 设置更具针对性,但这有时会很有用。
您还可以使用set numformat 进行更多涉及的格式化,例如添加组分隔符。 Read more about set options in the documentation.
【讨论】: