AS400绿屏SQL:仅修改年份为25的日期字段为39的报错求助
解决AS400 DB2 SQL更新日期字段的问题
AS400(现称IBM i)的DB2 SQL语法与你使用的DATEADD、YEAR()用法存在差异,报错原因要么是字段类型不匹配,要么是函数使用错误,以下分两种场景给出正确实现:
场景1:fieldname是DATE类型
DB2 for i中没有DATEADD函数,添加年份可使用ADD_YEARS()函数,或直接用DATE + n YEARS的语法;另外YEAR()函数返回四位年份(如2025)而非两位数,因此条件需调整:
UPDATE MATDEVDTA/FILENAME SET FIELDFIELD = ADD_YEARS(FIELDFIELD, 13) WHERE RIGHT(DIGITS(YEAR(FIELDFIELD)), 2) = '25';
也可直接判断四位年份:
UPDATE MATDEVDTA/FILENAME SET FIELDFIELD = FIELDFIELD + 13 YEARS WHERE YEAR(FIELDFIELD) = 2025;
场景2:fieldname是CHAR/VARCHAR类型(存储为'mm/dd/yy'格式字符串)
若字段为字符型,需先将其转换为DATE类型再处理,判断年份时可直接截取字符串最后两位:
UPDATE MATDEVDTA/FILENAME SET FIELDFIELD = CHAR(ADD_YEARS(DATE(FIELDFIELD, 'MM/DD/YY'), 13), 'MM/DD/YY') WHERE SUBSTR(FIELDFIELD, 7, 2) = '25';
这里DATE(FIELDFIELD, 'MM/DD/YY')负责将字符串转为DATE类型,处理后再转回字符型以保持原格式。
注意事项
- 执行更新前建议先用
SELECT语句验证条件是否正确,避免误更新:
比如DATE类型的验证语句:SELECT FIELDFIELD FROM MATDEVDTA/FILENAME WHERE RIGHT(DIGITS(YEAR(FIELDFIELD)), 2) = '25'; - IBM i的两位数年份默认遵循系统
YEARWINDOW设置,需确保转换时的世纪解析符合预期。
内容的提问来源于stack exchange,提问作者Mounika Srinivas
相关产品推荐
相关产品推荐

