我试图使用下面的代码更新表,但得到错误sql错误:ora-01840:输入值不够长,无法使用日期格式,因为\u dt\u wid上的\u是一个数字列,带有类似于“20191231”的示例记录,x\u need\u上的预期结果是“31-dec-19”。x\u need\u by\u dt是一个日期列。事先谢谢你的帮助。
update ADW12_DW.W_PURCH_COST_F T
set (
T.X_NEED_BY_DT
) =
(
select
TO_DATE(DUE_ON_DT_WID,'YYYYMMDD')
from ADW12_DW.I$_1200778522_6 S
where T.DATASOURCE_NUM_ID =S.DATASOURCE_NUM_ID
and T.INTEGRATION_ID =S.INTEGRATION_ID
)
where (DATASOURCE_NUM_ID, INTEGRATION_ID)
in (
select DATASOURCE_NUM_ID,
INTEGRATION_ID
from ADW12_DW.I$_1200778522_6
where IND_UPDATE = 'U'
)
1条答案
按热度按时间xfb7svmp1#
你的数据格式肯定有问题
YYYYMMDD
必须有8作为数据长度(因为在您的数据中,年份将排在第一位)。请使用以下查询查找问题数据并进行更正。
我想你有这样的数据
20191231
还有191231
. 你认为他们是一样的吗?即'31-DEC-19'
那你需要用CASE..WHEN
以及RR/YYYY
设置年份格式如下:如果您使用的是oracle 12.2或更高版本,则可以使用
ON CONVERSION ERROR
合同条款TO_DATE
当从列到日期的转换失败时,按以下方式设置默认值: