前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL字符串拆分函数:SUBSTRING_INDEX——充满血泪的一次数据拯救记

MySQL字符串拆分函数:SUBSTRING_INDEX——充满血泪的一次数据拯救记

作者头像
诡途
发布2022-05-09 19:00:06
1.1K0
发布2022-05-09 19:00:06
举报
文章被收录于专栏:诡途的python路诡途的python路

问题描述:由于个人操作不当(所谓不当是因为创建表的时候日期顺手设置成date格式了,而需要存入的日期格式如下图【我拯救回来的】应该为varchar/char),导致录入数据库缺失,日期均变成了【0000-00-00】,由于是历史数据传输,所以对应的excel源文件还有,重新上传也行,但是假如我没有源文件怎么办?所以就想着用Mysql解决

在这里插入图片描述
在这里插入图片描述

数据说明:我有一列PK值是由【日期+字段A+字段B】构成的,所以我只要把PK拆分了就行

NO.1【数据拆分】 SUBSTRING_INDEX(str, delim, count)

参数名

解释

str

需要拆分的字符串

delim

分隔符,通过某字符进行拆分

count

当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符。

由于SUBSTRING_INDEX需要分割符,但是我的PK是直接拼接的,不过幸好我的字段A只有3个值(a,b,c) 先用replace替换出来固定符号

代码语言:javascript
复制
UPDATE table_name  SET 日期 = REPLACE(日期, 'a', ',') 
UPDATE table_name  SET 日期 = REPLACE(日期, 'b', ',') 
UPDATE table_name  SET 日期 = REPLACE(日期, 'c', ',') 

在此我以为大功告成的时候

代码语言:javascript
复制
#`**错误示范`**
UPDATE table_name SET 日期=(
SELECT SUBSTRING_INDEX( 日期,',',1) from table_name )

现实总是冰冷的 报错:You can't specify target table 'table_name' for update in FROM clause 大致意思就是:MySQL不允许SELECT FROM后面指向用作UPDATE的表。

相关问题解释:https://blog.csdn.net/qq_15071263/article/details/79001487

NO.2 创建一个辅助表

代码语言:javascript
复制
INSERT INTO test (
SELECT PK,SUBSTRING_INDEX( 日期,',',1) from table_name )

即把分割后的值连同PK字段一起放入临时表test里

No.3update 更新

代码语言:javascript
复制
UPDATE table_name w, test SET w.日期= test.日期
WHERE w.PK= test.PK

至此,拯救成功!耗费了我大概一个多小时,由于历史数据太多,耗时跟重新写一遍时间也差不多!但是这次尝试让我多掌握了一个知识点!每天进步一点点!!! 最后说一下这种update更新速度真快,8883行数据只用了0.304s

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档