Mysql字符串切分


Mysql字符串切分的處理

 

前段時間做了一個對於字符串的切分,對於網頁爬取的數據或者不規范的數據來源,常常會有這種需求。

 

由於在處理的過程中,sql語句中對字符串的出里函數以及方法不太了解,走了不少彎路。

這里記錄一下。

 

Mysql 對字符串解切分處理,主要用到了4個函數,

SUBSTRING_INDEX(str,delim,count)

Str 是要處理字符串,

Delim是切分字符如:’,’

Count 是截取的字段數,如3,截取第三個,前的字段

這是一個很有趣的函數,當你的count,但你的count給到足夠大了時候它不起任何作用,不如其他語言中的split()那么好用。

 

SUBSTRING(str,pos)

Str 字符串源,

Pos 開始截取的位置,pos可以為負,表示從后開始計數的位置。

 

CHAR_LENGTH(str)

 

REPLACE(str,from_str,to_str)

 

REPLACE(SUBSTRING(SUBSTRING_INDEX(`major_tax_violatio`,',',i),CHAR_LENGTH(SUBSTRING_INDEX(`major_tax_violatio`,',',i-1))+1),',','')

用來獲取兩個’,’分隔符之間的數據。

 

由於mysql沒有在一行數據做出循環,或者保存數據辦法(我不知道),所以我們能夠控制截取的結果的只有count,以及where匹配。

 

這里我使用的是count++的方式,第一次截取所有的第一個’,’前的數據,第二次截取第二個’,’與第一個’,’之間的字符

where

SUBSTRING(SUBSTRING_INDEX(major_tax_violatio,',',i),CHAR_LENGTH(SUBSTRING_INDEX(major_tax_violatio,',',i-1))+1) regexp 'public_date'   使用正則表達式來篩選。

 

對於循環的跳出條件

  1. 當所有的元組的該字段都已經匹配上了(用一個rows+=ROW_COUNT(),來累加update的元組之和等於所有元組數)
  2. 當一個所有的已經匹配完畢(所有的,分割符分割的內容都已經匹配到了),但是有部分元組沒有匹配到我們想要的數據。

--REPLACE(SUBSTRING(SUBSTRING_INDEX(`major_tax_violatio`,',',i),CHAR_LENGTH(SUBSTRING_INDEX(`major_tax_violatio`,',',i-1))+1),',','')

 寫入一個tmp表中,當這個表的所有字段都為null,或者’’時表示改字段已經匹配完畢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM