SQL UPDATE语句技术问询:如何仅修改TableA指定行日期年份为2022
正确的UPDATE语句写法
原语句的问题在于直接给DATE类型字段赋值字符串'2021',既不符合DATE类型的赋值规则,也没有保留原日期的月份和日期部分。以下是不同主流数据库的正确写法:
MySQL/MariaDB
使用日期运算函数直接调整年份,无需字符串转换:
UPDATE TableA SET Column1 = DATE_ADD(Column1, INTERVAL (2022 - YEAR(Column1)) YEAR) WHERE Column2 = 10;
或者通过字符串拼接转换(兼容性更广):
UPDATE TableA SET Column1 = STR_TO_DATE(CONCAT('2022-', DATE_FORMAT(Column1, '%m-%d')), '%Y-%m-%d') WHERE Column2 = 10;
PostgreSQL
利用MAKE_DATE函数构造新日期:
UPDATE TableA SET Column1 = MAKE_DATE(2022, EXTRACT(MONTH FROM Column1)::INTEGER, EXTRACT(DAY FROM Column1)::INTEGER) WHERE Column2 = 10;
SQL Server
使用DATEFROMPARTS函数生成新日期:
UPDATE TableA SET Column1 = DATEFROMPARTS(2022, MONTH(Column1), DAY(Column1)) WHERE Column2 = 10;
这些语句都会仅将符合条件行的Column1年份修改为2022,同时保留原日期的月份和日期信息,且正确适配DATE类型字段的赋值要求。
内容的提问来源于stack exchange,提问作者Kh Ab
相关产品推荐
相关产品推荐

