在Oracle数据库中,TO_CHAR(Date)给出结果' 00-000-00'

时间:2017-04-09 03:59:51

标签: sql oracle date

我有一个日期列,我需要转换为字符。但这样做它会检索' 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

你能解释一下为什么这些奇怪的事情发生了以及如何处理这个问题?

1 个答案:

答案 0 :(得分: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;