Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PL SQL-将时间戳转换为日期时间/日期_Sql_Oracle_Plsql_Timestamp_Date Conversion - Fatal编程技术网

PL SQL-将时间戳转换为日期时间/日期

PL SQL-将时间戳转换为日期时间/日期,sql,oracle,plsql,timestamp,date-conversion,Sql,Oracle,Plsql,Timestamp,Date Conversion,错误是: ORA-01830:日期格式图片在转换整个输入字符串之前结束 183000000-“日期格式图片在转换整个输入字符串之前结束” 我们的目标是回报像这样的东西 2017-07-91 23:14:00 (不包括点后的内容) 计划的时间(时间戳)如下所示: 这应该可以做到: select to_timestamp(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS.FF') as SCHEDULED_TIME, TRUNC(to_date(to_timestamp(

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

我们的目标是回报像这样的东西

2017-07-91 23:14:00 (不包括点后的内容)

计划的时间(时间戳)如下所示:

这应该可以做到:

select 
to_timestamp(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS.FF') as SCHEDULED_TIME,
TRUNC(to_date(to_timestamp(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS.FF'),'YYYY-MM-DD HH24:MI:SS'))
from S_TIDAL_STATUS

请查看文档以查看to_timestamp和to_char之间的差异。

尝试中的问题是应用于时间戳的函数to_DATE()。TO_DATE()接受VARCHAR2(字符串)输入,而不是时间戳。因此,Oracle首先使用NLS_timestamp_FORMAT参数隐式地将时间戳转换为字符串,然后尝试将该字符串转换为日期。根据NLS_时间戳_格式,可能会出现不同的错误

将时间戳转换为日期(datetime)的方法是使用CAST函数,同时截断一秒的分数。例如:

select 
to_char(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS.FF') as time_to_csecs,
to_char(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS') as time_to_secs,
TRUNC(to_date(to_char(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')) as time_to_day
from S_TIDAL_STATUS
或者,如果所有字符串都是该格式,则可以先截断字符串,然后直接应用于_DATE:

select systimestamp, 
       cast (systimestamp as date) as ts_cast_to_date
from   dual
;

嗯,它必须首先转换为字符串的原因是什么?只是curious@AnnaHuang如果不将时间戳转换为字符串,则sqldeveloper将根据NLS_timestamp_FORMAT(用于时间戳)或NLS_DATE_FORMAT(用于日期)的当前设置显示字符串。从本质上讲,sqldeveloper(以及sqlplus和几乎任何其他临时应用程序)将使用所选的Oracle API,通过告诉API进行转换,将所有数据类型强制转换为字符串。换句话说,应用程序告诉Oracle返回字符串,而不是其本机(db)数据类型中的值。它使人们更容易编写像sqldeveloper和sqlplus这样的应用程序。@jeff6times7-实际上是Oracle数据库引擎本身进行隐式转换,而不是前端(SQL Developer或SQL*Plus)。但除此之外,解释是正确的。这是正确的,但应用程序必须告诉API它需要哪些数据类型。如果可以的话,Oracle会同意的。您好,您是否尝试过使用char(SCHEDULED_TIME,'YYYY-MM-DD HH24:MI:SS')?您不需要PL/SQL。看起来像一个简单的SQL问题。
to_date(substr(scheduled_time, 1, 19), 'yyyy-mm-dd hh24:mi:ss')