我使用select value,datetime,to_char(sensortime,'DD-MON-YYYY HH24:MI:SSxFF') datetime2 from test;
我发现datetime和datetime2不同,我怎样才能得到相同的结果?
答案 0 :(得分:2)
为什么
to_char
函数可能会更改oracle中的日期
我不会更改日期 - 它只会更改日期的格式。
SQL / Plus和SQL Developer通常使用NLS_TIMESTAMP_FORMAT
会话参数隐式地将格式应用于TIMESTAMP
数据类型。
您的查询是有效的:
SELECT value,
TO_CHAR(
sensortime,
(
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT'
)
) AS datetime,
to_char(sensortime,'DD-MON-YYYY HH24:MI:SSxFF') datetime2
FROM test
查看输出,NLS_TIMESTAMP_FORMAT
是
'DD-MON-YYYY HH12:MI:SSxFF AM'
,您的格式为:
'DD-MON-YYYY HH24:MI:SSxFF'
这就是为什么他们提供不同的输出(一个是12小时制,另一个是24小时制)。
我怎样才能得到相同的结果?
更改您的查询以匹配NLS_TIMESTAMP_FORMAT
:
SELECT value,
sensortime,
TO_CHAR(sensortime,'DD-MON-YYYY HH12:MI:SSxFF AM') datetime2
FROM test
或更改NLS_TIMESTAMP_FORMAT
:
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD-MON-YYYY HH24:MI:SSxFF'
并使用您的查询。
答案 1 :(得分:1)
将会话NLS_TIMESTAMP_FORMAT
更改为:
alter session set NLS_TIMESTAMP_FORMAT = 'DD-MON-YYYY HH24:MI:SSxFF';
如果您的专栏的数据类型为TIMESTAMP WITH TIME ZONE
,则必须使用NLS_TIMESTAMP_TZ_FORMAT
代替NLS_TIMESTAMP_FORMAT