日期格式在Oracle中的显示方式有所不同

时间:2018-09-05 13:20:30

标签: oracle oracle12c

我正在将报告数据从数据库导出到excel。我有2个DB(Local&QA)模式,并且对报表的查询相同。在这里,我面临着日期格式的问题。我们正在使用 Oracle 12c

日期格式应为“ DD-MON-YY ”,如“ 01-AUG-18 ” 将数据导出到excel时,
从本地数据库中导出的日期,例如“ 12-09-18 ”。
从质量检查数据库中导出,它的输出日期类似于“ 12-AUG-18 ”。
查询是:

select trim(to_date('01-01-1970 00','DD-MM-YYYY hh24') + (createdtime)/1000/60/60/24) 
  from TBL_RESPONSESUMMARY;

有人可以指导我吗?

2 个答案:

答案 0 :(得分:2)

使用TO_CHAR显式指定要用于输出日期的格式模型:

SELECT TO_CHAR(DATE '1970-01-01' + createdtime/1000/60/60/24, 'DD-MON-YYYY')
FROM   TBL_RESPONSESUMMARY;

查询的作用是:

  1. to_date('01-01-1970 00','DD-MM-YYYY hh24')将纪元值生成为DATE数据类型;
  2. + (createdtime)/1000/60/60/24向其添加毫秒偏移量值(数据类型将保留为DATE);
  3. trim( string_value )采用字符串值并删除前导和尾随空格;但是,您的输入值是DATE而不是字符串,因此Oracle必须使用TO_CHAR执行隐式转换,并且它使用NLS_DATE_FORMAT会话参数。在您的本地数据库上,该值可能是DD-MM-RR,但是在质量检查数据库上,它是DD-MON-RR,因此您获得了不同的值。

您可以更改NLS_DATE_FORMAT以便在两个数据库上保持一致-但是,最好对TO_CHAR使用显式调用,这样您就不必依赖会话变量和隐式强制转换。 / p>

答案 1 :(得分:0)

两个数据库之间的日期格式不同。在本地数据库上运行此命令以更改日期格式

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-Mon-YY';