MySQL字符串拆分函數:SUBSTRING_INDEX——充滿血淚的一次數據拯救記

問題描述:由於個人操作不當(所謂不當是因爲創建表的時候日期順手設置成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替換出來固定符號

UPDATE table_name  SET 日期 = REPLACE(日期, 'a', ',') 
UPDATE table_name  SET 日期 = REPLACE(日期, 'b', ',') 
UPDATE table_name  SET 日期 = REPLACE(日期, 'c', ',') 

在此我以爲大功告成的時候

#`**錯誤示範`**
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 創建一個輔助表

INSERT INTO test (
SELECT PK,SUBSTRING_INDEX( 日期,',',1) from table_name )

即把分割後的值連同PK字段一起放入臨時表test裏

No.3update 更新

UPDATE table_name w, test SET w.日期= test.日期
WHERE w.PK= test.PK

至此,拯救成功!耗費了我大概一個多小時,由於歷史數據太多,耗時跟重新寫一遍時間也差不多!但是這次嘗試讓我多掌握了一個知識點!每天進步一點點!!!
最後說一下這種update更新速度真快,8883行數據只用了0.304s
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章