我正在从db2迁移到Oracle数据库。有人能解释一下为什么小数点和时间在db2中显示而在Oracle中不显示。有什么具体的原因吗?例如:
omhiaaxx1#
Oracle数据库以非人类可读格式将NUMBER s和DATE s存储为二进制值,并且您不能更改它们的存储方式。如果你想以某种方式显示值,那么使用TO_CHAR并指定你想要它们显示的格式。在Oracle中:
NUMBER
DATE
TO_CHAR
1000
1000.000
当您查询数据库时,它将向客户端应用程序返回二进制值,然后客户端应用程序选择如何以有意义的方式向用户显示二进制数据。如果您作为用户想要更改客户端显示数据的方式,则可以:1.修改客户端应用程序上的设置。对于SQL Developer,您可以更改NLS_DATE_FORMAT会话参数或更改首选项菜单中的设置(客户端上没有将数字显示为特定小数位数的设置);或者1.使用TO_CHAR将二进制值格式化为所需格式的字符串。
NLS_DATE_FORMAT
SELECT TO_CHAR(your_number_column, '9999D000') AS your_formatted_number, TO_CHAR(your_date_column, 'YYYY-MM-DD HH24:MI:SS') AS your_formatted_date FROM your_table;
字符串
1条答案
按热度按时间omhiaaxx1#
Oracle数据库以非人类可读格式将
NUMBER
s和DATE
s存储为二进制值,并且您不能更改它们的存储方式。如果你想以某种方式显示值,那么使用
TO_CHAR
并指定你想要它们显示的格式。在Oracle中:
NUMBER
以二进制格式按value存储,每2位1字节,并且Never以任何特定的人类可读格式存储。1000
和1000.000
的值相同,因此数据库将只存储1000
,并且永远不会存储任何尾随的零值十进制数字。DATE
s以二进制格式存储,由7个字节组成,代表世纪,世纪年,月,日,小时,分钟和秒。它始终具有所有这些日期和时间组件,并且从不以任何特定的人类可读格式存储。当您查询数据库时,它将向客户端应用程序返回二进制值,然后客户端应用程序选择如何以有意义的方式向用户显示二进制数据。
如果您作为用户想要更改客户端显示数据的方式,则可以:
1.修改客户端应用程序上的设置。对于SQL Developer,您可以更改
NLS_DATE_FORMAT
会话参数或更改首选项菜单中的设置(客户端上没有将数字显示为特定小数位数的设置);或者1.使用
TO_CHAR
将二进制值格式化为所需格式的字符串。字符串