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

Ann*_*ang 4 sql oracle plsql timestamp date-conversion

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
Run Code Online (Sandbox Code Playgroud)

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

目标是返回类似

2017-07-91 23:14:00(点后没有内容)。

SCHEDULED_TIME(时间戳)如下所示: 在此处输入图片说明

mat*_*guy 5

您尝试遇到的问题是应用于时间戳的函数TO_DATE()。TO_DATE()采用VARCHAR2(字符串)输入,而不是时间戳。因此,Oracle首先使用NLS_TIMESTAMP_FORMAT参数隐式地将时间戳转换为字符串,然后尝试将该字符串转换为日期。根据您的NLS_TIMESTAMP_FORMAT,您可能会遇到不同的错误。

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

select systimestamp, 
       cast (systimestamp as date) as ts_cast_to_date
from   dual
;
Run Code Online (Sandbox Code Playgroud)

或者,如果您所有的字符串都完全采用该格式,则可以先截断字符串并直接应用TO_DATE:

to_date(substr(scheduled_time, 1, 19), 'yyyy-mm-dd hh24:mi:ss')
Run Code Online (Sandbox Code Playgroud)