MySQL如何拆分test表column1列数据为姓名与日期两列?
解决MySQL拆分column1为name和date列的方法
嘿,这个需求挺常见的,我给你两种方案:一种是直接查询时拆分显示,另一种是把拆分后的列永久添加到表中,你可以根据自己的需求选。
方案一:临时查询拆分(不修改原表)
如果只是想查看拆分后的结果,不需要改动原表结构,直接用MySQL的字符串函数就能搞定:
SELECT SUBSTRING_INDEX(column1, ' ', 1) AS name, REPLACE(SUBSTRING_INDEX(column1, ' ', -1), ':', '-') AS date FROM test;
简单解释下逻辑:
SUBSTRING_INDEX(column1, ' ', 1):从左往右找第一个空格,截取空格前面的内容,就是你的姓名部分(比如name1)。SUBSTRING_INDEX(column1, ' ', -1):从右往左找第一个空格,截取空格后面的日期字符串(比如2017:01-01),再用REPLACE把里面的冒号换成横杠,就得到了标准的2017-01-01格式。
方案二:永久添加列并填充数据
如果想把拆分后的列永久存在表中,方便后续日常使用,可以分两步操作:
1. 新增name和date列
先给test表添加两个新列,name存姓名,date存日期(建议用DATE类型,方便后续做日期筛选、计算等操作):
ALTER TABLE test ADD COLUMN name VARCHAR(50) COMMENT '姓名', ADD COLUMN date DATE COMMENT '日期';
2. 填充数据到新列
用UPDATE语句把原column1的内容拆分后写入新列,这里用STR_TO_DATE把处理后的字符串转换成标准DATE类型:
UPDATE test SET name = SUBSTRING_INDEX(column1, ' ', 1), date = STR_TO_DATE(REPLACE(SUBSTRING_INDEX(column1, ' ', -1), ':', '-'), '%Y-%m-%d');
操作完成后,你的test表就会多出name和date两列,数据也完全对应好了。
注意:以上方案都假设你的column1格式是固定的“姓名 年:月-日”,如果有格式不规范的行,可能需要额外处理,但从你给出的示例数据来看,这个逻辑完全适用。
内容的提问来源于stack exchange,提问作者calle.fr
相关产品推荐
相关产品推荐

