MySQL分割长字符串成多个字段以及为表添加一列自动编号并替换字段

1.分割长字符串为多个字段

      处理数据时遇到的一个问题,本来表中的字段应该分开的,但是由于数据原因,导致所有字段混合到一个字段中,此时我们需要将长字符串切分成原本的不同字段才能进一步处理。

      如以下原始数据(用户对书籍的评分):应该分为 用户ID | 书本ID | 用户对书本的打分

      仅通过MySQL语句解决该问题的思路是通过 ' ";" '这个子字符串定位来分割内容:

CREATE TABLE BookRating1 AS
SELECT
    SUBSTR(bookrating ,1 ,LOCATE('";"',bookrating)-1) AS 'userID',
    SUBSTR(bookrating ,LOCATE('";"',bookrating)+ 3 ,LOCATE('";"',bookrating,LOCATE('";"',bookrating)+1) - LOCATE('";"',bookrating) -3) AS 'bookID',
    SUBSTRING(bookrating ,LOCATE('";"',bookrating,LOCATE('";"',bookrating)+1)+3) AS 'rating'
FROM BookRatings

       以上主要用到字符串处理函数 SUBSTR(),SUBSTRING(),LOCATE() 三个函数,用法可以自行搜索。

分解后的表BookRating1即为:


2.添加一列自动编号以及字段替换

       从 bookID 这个字段看出其数字混杂着字母,所以打算将字符串按照行号重新设置 bookID为数值型以简化操作。

先用 DISTINCT 方式取出所有的 bookID 建一个表名为 BOOKID的新表,

CREATE TABLE BOOKID AS
SELECT DISTINCT bookID 
FROM BookRating1

      然后按以下方式重新设置 bookID(即以行号作为书籍编号):

SET @x = 0;
CREATE TABLE BookIDNew AS
SELECT @x := IFNULL(@x,0)+1 AS bookID , bookID AS book
FROM BOOKID

      添加自动编号后的表BookIDNew为:


      最后用BookIDNew(原始BookRating1表中的书籍编号bookID在此表中的字段名变为book)新表中的 bookID 来替换原始表BookRating1中的 bookID 即可。

CREATE TABLE BookRatingFinal AS 
SELECT A.useID AS userID, B.bookID , A.rating
FROM BookRating1 A, BookIDNew B
WHERE A.bookID = B.book

      替换bookID后的新表BookRatingFinal如下所示:

      至此,所有预处理已经完成了,可以愉快地进行数据分析啦~




猜你喜欢

转载自blog.csdn.net/cc18868876837/article/details/79752497