转换时的问题

时间:2017-12-12 07:56:52

标签: oracle

我尝试执行以下查询,但是它让我error

SELECT TO_DATE(
        TIMESTAMP '1970-01-01 00:00:00' + numtodsinterval(1511421211, 'second')
        ,'DD-MM-YYYY HH24:MI:SS') 
FROM dual

错误: ORA-01830:日期格式图片在转换整个输入字符串之前结束

3 个答案:

答案 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