SQL中如何根据另一列的值设置日期列数据
需求说明
现有一张包含Col1、Col2两个字段的SQL表,初始数据如下:
Col1 Col2 202205 NULL 202204 NULL 202103 NULL
其中Col1存储YYYYMM格式的年月数值,Col2初始值均为NULL,需要根据Col1取值填充Col2,转换为对应当月1日的标准日期格式,期望结果如下:
Col1 Col2 202205 2022-05-01 202204 2022-04-01 202103 2021-03-01
实现方案
不同数据库的日期处理函数存在差异,可根据你使用的数据库选择对应语句,执行前把语句里的你的表名替换为实际表名即可:
- MySQL / MariaDB
拼接年月和日值01后通过字符串转日期函数生成目标日期:UPDATE 你的表名 SET Col2 = STR_TO_DATE(CONCAT(Col1, '01'), '%Y%m%d'); - SQL Server
拆分年、月字段后通过日期构造函数生成当月1日:UPDATE 你的表名 SET Col2 = DATEFROMPARTS(LEFT(Col1,4), RIGHT(Col1,2), 1); - PostgreSQL / Oracle
拼接字符串后转日期即可:-- PostgreSQL UPDATE 你的表名 SET Col2 = TO_DATE(Col1 || '01', 'YYYYMMDD'); -- Oracle UPDATE 你的表名 SET Col2 = TO_DATE(Col1 || '01', 'YYYYMMDD');
如果不需要持久化更新表数据,仅在查询时返回转换后的结果,可以把更新语句替换为查询语句,以MySQL为例:
SELECT Col1, STR_TO_DATE(CONCAT(Col1, '01'), '%Y%m%d') AS Col2 FROM 你的表名;
内容的提问来源于stack exchange,提问作者codejüngling
相关产品推荐
相关产品推荐

