我在oracle数据库中有数据字段,我需要更新我的数据字段,并使用add_months函数再添加3个月,如下所示,我的表名为psm_voucher。
Name Null? Type
------------------------------- -------- ----
BARCODE VARCHAR2(20)
EXPDT VARCHAR2(8)
Select barcode,expdt from psm_voucher where barcode='BBCV101670';
BARCODE EXPDT
-------------------- --------
BBCV101670 20201231然后,我尝试按下面的方式更新查询,但失败了
Update psm_voucher set expdt=add_months(expdt,3) where barcode='BBCV101670';
update psm_voucher set expdt=add_months(expdt,3) where barcode='BBCV101670'
*
ERROR at line 1:
ORA-01861: literal does not match format string非常感谢您的好心帮助。
发布于 2020-11-30 17:39:05
由于表中的日期存储为字符串,因此需要遵循一些基本步骤:
使用以下查询:
update psm_voucher
set expdt= to_char(add_months(to_date(expdt,'YYYYMMDD'),3), 'YYYYMMDD')
where barcode='BBCV101670'发布于 2020-11-30 14:44:16
造成问题的根本原因是将日期存储为字符串。修复数据模型,因此EXPDT是一个date。
那么你的代码就能工作了。
发布于 2020-11-30 15:34:53
您永远不应该依赖默认的字符串到日期的转换,这是您在将VARCHAR字符串传递给函数add_months时所做的工作。
with dt as (
select '20201231' EXPDT from dual)
select
add_months(expdt,3)
from dt;此错误与ORA-01861: literal does not match format string有关,因为会话日期格式是存储字符串20201231的其他格式。
您必须使用正确的格式掩码来解释转换to_date,根据您的示例它是YYYYMMDD。
with dt as (
select '20201231' EXPDT from dual)
select
add_months(to_date(expdt,'YYYYMMDD'),3) as EXPDT_D
from dt;
EXPDT_D
-------------------
31.03.2021 00:00:00是的,在DATE格式列中存储日期时,会遇到较少的问题
https://stackoverflow.com/questions/65075561
复制相似问题