我正在将报告数据从数据库导出到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;
有人可以指导我吗?
答案 0 :(得分:2)
使用TO_CHAR
显式指定要用于输出日期的格式模型:
SELECT TO_CHAR(DATE '1970-01-01' + createdtime/1000/60/60/24, 'DD-MON-YYYY')
FROM TBL_RESPONSESUMMARY;
查询的作用是:
to_date('01-01-1970 00','DD-MM-YYYY hh24')
将纪元值生成为DATE
数据类型; + (createdtime)/1000/60/60/24
向其添加毫秒偏移量值(数据类型将保留为DATE
); 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';