如何为Table A中id=2的记录设置前一日e_dt值?
解决方案:更新指定记录的日期字段
这需求很明确,咱们直接看不同数据库下的实现方式就行——毕竟不同数据库的日期处理函数略有差异:
MySQL 实现
子查询写法
适合逻辑简单的场景,直接通过子查询获取目标日期再做计算:
UPDATE `Table A` SET e_dt = DATE_SUB((SELECT s_dt FROM `Table A` WHERE id = 10), INTERVAL 1 DAY) WHERE id = 2;
JOIN 写法
如果数据量较大,JOIN的方式通常性能更优:
UPDATE `Table A` t1 JOIN `Table A` t2 ON t2.id = 10 SET t1.e_dt = DATE_SUB(t2.s_dt, INTERVAL 1 DAY) WHERE t1.id = 2;
PostgreSQL 实现
PostgreSQL的日期运算更灵活,直接用减法即可:
子查询写法
UPDATE "Table A" SET e_dt = (SELECT s_dt FROM "Table A" WHERE id = 10) - INTERVAL '1 day' WHERE id = 2;
JOIN 写法
UPDATE "Table A" t1 SET e_dt = t2.s_dt - INTERVAL '1 day' FROM "Table A" t2 WHERE t1.id = 2 AND t2.id = 10;
SQL Server 实现
SQL Server用DATEADD函数来处理日期加减:
子查询写法
UPDATE [Table A] SET e_dt = DATEADD(DAY, -1, (SELECT s_dt FROM [Table A] WHERE id = 10)) WHERE id = 2;
JOIN 写法
UPDATE t1 SET t1.e_dt = DATEADD(DAY, -1, t2.s_dt) FROM [Table A] t1 JOIN [Table A] t2 ON t2.id = 10 WHERE t1.id = 2;
注意点
如果你的表名不是带空格的Table A,而是TableA这类无空格的名称,就可以去掉反引号/双引号/方括号,直接写表名即可。
内容的提问来源于stack exchange,提问作者user3183055
相关产品推荐
相关产品推荐

