2017-04-09 27 views
-1

我有一个需要转换为字符的日期列。但是这样做它会检索'00 -000-00',即使实际数据具有日期值。另外,当我再次将其转换为日期时,它会显示第二天的值。在Oracle数据库中,TO_CHAR(日期)给出结果'00 -000-00'

例如:

Value: 25-MAR-17 (Date Datatype) 
TO_CHAR(Value, 'DD-MON-YY'): '00-000-00' 
TO_DATE(Value, 'DD-MON-YY'): '26-MAR-17' 

而且这不会发生的所有的值,但只有最近的值。

这是目前在该日期列中的值转储:

select OrderNumber, LoanDate, Dump(LoanDate) from OrderDetail 
where OrderNumber=283402 
OrderNumber| LoanDate | Dump(LoanDate) 
283402  | 26-MAR-17 | Typ=12 Len=7: 120,117,3,27,0,15,40 

能否请您给我解释一下为什么这些奇怪的事情发生,如何处理?

+3

这是相当困难对于我们理解你的问题,因为没有办法,应与你给出的数据发生。请提供可复制的测试用例。也就是说,带有示例数据的虚拟表以及您正在运行的查询会显示此行为。减少细节到必需品。您可能会发现这个练习可以让您了解并帮助您在没有我们帮助的情况下解决您的问题。 – APC

+0

日期到日期转换只是为了检查它的行为。 –

+2

请提供必要的DDL和DML语句以复制问题的[MCVE]。请同时尝试'SELECT DUMP(your_date_column)FROM your_table'并发布其值。 – MT0

回答

0

把作为回答,而不是评论,因为你说什么0是不可能会太大发表评论

。如果您已将NLS_DATE_FORMAT设置为仅显示时间,则可能会得到零。由于timezone转换,您还可能获得下一个日期。

要解决问题,请按照下列步骤操作,编辑问题并在问题中提供输出。

  1. SELECT * FROM nls_session_parameters;

  2. 运行select sysdate from dual;并显示输出。

  3. 运行此alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS';
  4. 运行select sysdate from dual并显示输出。
  5. 现在再次选择日期,select <date column> from <your table> where rownum<2;
  6. 运行select to_char(date_column,'DD-MON-YYYY') from your_table where row_num<2;
+0

谢谢。将尝试它。 –

+1

但我不认为这是一个格式问题。 –

+0

当调用'to_char()'时,'nls_date_format'不相关。 –

相关问题