我想知道Oracle环境中的哪个参数导致这个:
假设我在两台不同的服务器上有两个数据库。数据库中的数据相同。
在sql developer下我写这个查询:
select to_char(date_column, 'DD/MM/YYYY') from my_table;
当我在sql developer中检查my_table时,日期显示的格式为'DD / MM / YY'
在一台服务器上,查询返回: 01/05/1945(很好) 但另一方面: 01/05/2045(不好)。
问题:配置中的参数有什么不同?我的ksh脚本中该参数的值应该是什么才能使它在两个基础上都有效?
注意:替换20而不是19只发生在本世纪头50年的日期。 实际上,在两个数据库上都会显示01/05/1955。
由于
转储功能的结果:试试这个日期09/05/55
好人:
09/05/1955 Typ = 12 Len = 7:119,155,5,9,1,1,1
坏人:
09/05/55 Typ = 12 Len = 7:119,155,5,9,1,1,1
这被称为不同存储吗?或者显示器不同。在这两种情况下,存储相同的字节,但我在问。
另外我想说数据插入数据库的方式是复制
两个查询的结果问:
在好的服务器上:
NUM NAME TYPE VALUE
224 nls_date_language 2
225 nls_date_format 2 DD/MM/YYYY
PARAMETER VALUE
NLS_DATE_FORMAT DD/MM/YYYY
NLS_DATE_LANGUAGE AMERICAN
错误的
NUM NAME TYPE VALUE
224 nls_date_language 2
225 nls_date_format 2
PARAMETER VALUE
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE FRENCH
答案 0 :(得分:1)
输出不同的原因是数据库中的数据不同(希望date_column的类型是日期) 使用此查询检查:
select date_column, dump(date_column) from my_table;
dump
函数将返回实际存储的数据类型,列长度和字节
这两个日期的原因可能与插入方式不同。
如果您使用字符串转换为日期,字符串仅包含年份的2位数,则可能会出现不同的结果。对于这样的字符串YY和RR,甚至存在2种不同的格式。
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34924
这里是日期格式元素列表,详细说明了如何使用它们
在日期格式中,Oracle存储完整的年份,因此不可能转换为to_char
(这里是How are dates stored in Oracle?)
答案 1 :(得分:1)
根据转储的值,值都会正确存储。区别在于NLS设置:
如果您只是查看SQL Developer中的表内容,并且这是显示差异发生的地方,那么最好的方法是专门为SQL Developer本身设置显示选项。
How can I set a custom date time format in Oracle SQL Developer?
确保获得所需格式的唯一方法是,服务器端应用程序以及客户端应用程序本身可以设置所需的NLS参数。否则,隐式转换将始终可能被外部配置项更改。
如果您在软件开发环境中工作,那么我建议您将NLS_DATE_FORMAT设置为" YYYY-MM-DD HH24:MI:SS"的ISO格式,因此它完全无歧义,并且始终显示日期中的任何元素。