我正在将报表数据从DB导出到excel。我有两个DB(Local&QA)模式,并且对报告有相同的查询。这里我面临一个日期格式的问题。我们使用的是Oracle12c。
数据格式应为“DD-MON-YY”,类似于“01-8月-18”,同时将数据导出到excel,
从本地db导出日期,如'12-09-18‘。
在QA db中,它导出日期类似于‘12-8月-18’。
查询是:
select trim(to_date('01-01-1970 00','DD-MM-YYYY hh24') + (createdtime)/1000/60/60/24)
from TBL_RESPONSESUMMARY;有人能给我指路吗。
发布于 2018-09-05 13:32:56
使用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,但是在QA数据库上,它是DD-MON-RR,因此得到不同的值。您可以更改NLS_DATE_FORMAT,使其在两个数据库上都是一致的-但是,最好使用对TO_CHAR的显式调用,这样您就不会依赖会话变量和隐式转换。
发布于 2018-09-05 13:25:29
两个数据库之间有不同的日期格式。在本地数据库上运行此命令以更改日期格式
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-Mon-YY';https://stackoverflow.com/questions/52186189
复制相似问题