【发布时间】:2021-10-26 23:10:54
【问题描述】:
谁能帮我理解下面的代码行做错了什么?
res_start_time_ := to_date(to_char(account_date_, 'YYYYMMDD ') || sched_ftime_, 'YYYYMMDD HH24:MI');
res_start_time_ 和 account_date_ 属于 DATE 类型。
sched_ftime_是VARCHAR2类型,可以为NULL。
在测试场景中,当account_date_ 有值且sched_ftime_ 有NULL 值时,我收到ORA-01861: literal does not match format string 错误。
谁能向我解释我做错了什么以及如何摆脱这个错误?
【问题讨论】:
-
@GordonLinoff 在 Oracle 中,
DATE数据类型总是具有年、月、日、小时、分钟和秒部分。将TO_DATE与时间组件一起使用是完全有效的。 -
我无法复制错误db<>fiddle。请edit您的问题包含一个带有完整(最小)PL/SQL 块的minimal reproducible example,我们可以执行该块来演示错误,以便我们可以复制您的问题。
-
你有一些样本值吗?通常不需要在 DATE 和 VARCHAR2 之间来回转换。
-
@MT0 尝试将
trunc(sysdate)(或其他任何内容,如日期)添加到sched_ftime_而不是NULL.. 和瞧。 -
@Georgy 问题指出“当
account_date_存在值且sched_ftime_存在NULL 时,我得到ORA-01861:文字与格式字符串不匹配错误。”因此,如果您对sched_ftime_使用非NULL值,则输入与说明它是NULL值的问题不匹配。
标签: oracle plsql oracle11g to-date