oracle日期格式问题

问题描述:

我们使用Oracle 10.2.0.4.0数据库,oracle表单生成器和报表生成器来创建表单和报表。oracle日期格式问题

现在问题出在我们的生产数据库nls_date_format是dd-mon-rr格式。当开发人员在开发人员套装中创建表单时,他们在表单级别提供dd-mm-rr格式,并且当表格中存储的日期格式为dd-mm-rr时。

现在,当开发人员运行窗体或报表生成器中它给DD-MM-RR format.but时相同的窗体或报表运行从应用程序的服务器端它给垃圾字符month.date和年印刷一样仅日期格式月垃圾字符显示。

希望大家指导好。

有两个问题。

当数据存储在表中时,日期格式为dd-mm-rr。

这是完全错误的。 Oracle不会以您看到的格式存储日期,您看到的是display。 Oracle以7 bytes的内部专有格式存储DATE,其中每个字节代表DATE的不同元素

Byte Description 
---- ------------------------------------------------- 
1  Century value but before storing it add 100 to it 
2  Year and 100 is added to it before storing 
3  Month 
4  Day of the month 
5  Hours but add 1 before storing it 
6  Minutes but add 1 before storing it 
7  Seconds but add 1 before storing it 

不要依赖于locale_specific NLS_DATE_FORMAT。始终使用:

  • TO_CHAR到你想要的格式
  • TO_DATE显示日期字符串显式转换为日期。

记住,TO_DATENLS依赖

如果你只有一个日期元素,如果你不计较时间元素,然后更好地利用ANSI日期文字遵循一定的固定格式'YYYY-MM-DD'。在垃圾字符

仅一个月显示

这又是因为你取决于NLS_DATE_LANGUAGE。正如我所说,你应该避免取决于区域设置特定的客户端设置。明确提及NLS_DATE_LANGUAGE或使用ANSI日期文字如果您不关心时间元素。

例如,

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR') dt FROM DUAL; 

DT 
--------- 
26-OCT-15 

SQL> alter session set nls_date_language='french'; 

Session altered. 

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR') dt FROM DUAL; 

DT 
----------- 
26-OCT. -15 

那么,究竟发生了上面?对于一个人使用法国nls_date_languageMONTH显示垃圾价值。我们通过明确提及nls_date_language来让它成为NLS独立。

SQL> SELECT TO_CHAR(SYSDATE, 'DD-MON-RR', 'nls_date_language=english') dt FROM DUAL; 

DT 
--------- 
26-OCT-15 

此外,NLS_LANG值可能无法正确在OS 环境变量设置。请参阅Why are junk values/special characters/question marks displayed on my client?

+0

我们已经在oracle表单中开发用于转换DD-MM-RR但仍然存在问题的oracle表单中的to_char,但在oracle应用服务器端仍存在问题。 –

+0

@jayeshkamaliya我敢打赌,你依赖于客户端的'NLS_DATE_LANGUAGE'。查看更新的示例。 –

+0

先生在我们的数据库nls_language_date是在注册表中NLS_LANG ameriacan和Oracle应用形式是GUJARATI_INDIA.UTF8这可能是这个问题的原因是什么? –