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
错误是: ORA-01830:日期格式图片在转换整个输入字符串之前结束 01830. 00000 - “日期格式图片在转换整个输入字符串之前结束”
目标是返回类似
的内容2017-07-91 23:14:00 (没有点后面的内容)。
答案 0 :(得分:5)
您尝试的问题是应用于时间戳的函数TO_DATE()。 TO_DATE()接受VARCHAR2(字符串)输入,而不是时间戳。因此Oracle首先使用您的NLS_TIMESTAMP_FORMAT参数隐式地将时间戳转换为字符串,然后尝试将此字符串转换为日期。根据您的NLS_TIMESTAMP_FORMAT,您可能会遇到不同的错误。
将时间戳转换为日期(日期时间)的方法 - 截断一秒的分数 - 是使用CAST函数。例如:
select systimestamp,
cast (systimestamp as date) as ts_cast_to_date
from dual
;
或者,如果您的所有字符串都以该格式显示,则可以先截断字符串并直接应用TO_DATE:
to_date(substr(scheduled_time, 1, 19), 'yyyy-mm-dd hh24:mi:ss')
答案 1 :(得分:2)
这应该可以解决问题:
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
请查看文档,了解to_timestamp和to_char之间的区别。