我尝试执行以下查询,但是它让我error
:
SELECT TO_DATE(
TIMESTAMP '1970-01-01 00:00:00' + numtodsinterval(1511421211, 'second')
,'DD-MM-YYYY HH24:MI:SS')
FROM dual
错误: ORA-01830:
日期格式图片在转换整个输入字符串之前结束
答案 0 :(得分:0)
语法对我来说有些不对劲。试试这个:
SELECT TO_DATE ('1970-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
+ NUMTODSINTERVAL (1511421211, 'second')
FROM DUAL;
编辑:
作为@a_horse ..说" Oracle DATE总是包含时间",因此如果时间戳不可见,那么您只需要看到NLS_DATE_FORMAT
in表格1}}。在你的情况下,它只是设置为
NLS_DATE_FORMAT =' DD-MM-YYYY';
因此,您需要先V$NLS_PARAMETERS
会话才能获得alter
中的timestamp
。见下文:
SQLPLUS
答案 1 :(得分:0)
这是你期待的吗?
select to_char(DATE '1970-01-01' + NUMTODSINTERVAL (1511421211, 'second'), 'yyyy/mm/dd hh24:mi:ss') from dual;
答案 2 :(得分:0)
TO_DATE( datestring, format_model )
函数将字符串作为参数。
您的查询:
SELECT TO_DATE(
TIMESTAMP '1970-01-01 00:00:00' + numtodsinterval(1511421211, 'second')
,'DD-MM-YYYY HH24:MI:SS'
)
FROM dual
传递TIMESTAMP
和字符串,以便Oracle必须执行从TIMESTAMP
到字符串的隐式转换,以便您的函数有效:
SELECT TO_DATE(
TO_CHAR(
TIMESTAMP '1970-01-01 00:00:00' + numtodsinterval(1511421211, 'second'),
(
SELECT value
FROM NLS_SESSION_PARAMETERS
WHERE parameter = 'NLS_TIMESTAMP_FORMAT'
)
),
'DD-MM-YYYY HH24:MI:SS'
)
FROM dual
如果NLS_TIMESTAMP_FORMAT
会话参数与您的格式模型'DD-MM-YYYY HH24:MI:SS'
不匹配,则会引发异常。
您可以更改NLS_TIMESTAMP_FORMAT
参数 - 但这是一个为每个用户设置的会话参数,每个用户可以在会话期间随时更改它,因此不应该是溶液
相反,您可以使用DATE
字面而不是TIMESTAMP
字面值:
SELECT DATE '1970-01-01' + NUMTODSINTERVAL (1511421211, 'second')
FROM DUAL
或者,如果您想使用时间戳,则可以使用CAST
函数:
SELECT CAST(
TIMESTAMP '1970-01-01 00:00:00' + NUMTODSINTERVAL (1511421211, 'second')
AS DATE
)
FROM DUAL