亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mysql中substring_index函數(shù)實現(xiàn)字符分割一行變多行

 更新時間:2023年12月22日 09:27:12   作者:一個處女座-代碼潔癖的程序猿  
在MySQL中,字符串分割是一個常見的操作,本文主要介紹了Mysql中substring_index函數(shù)實現(xiàn)字符分割一行變多行,具有一定的參考價值,感興趣的可以了解一下

問題

有時候我們表里會存在某個字符(例如經常用到的,)分割的分割的數(shù)據(jù),但是在使用的時候要將存在字符分割數(shù)據(jù)拆分,我們一般的做法先從數(shù)據(jù)庫中將數(shù)據(jù)查詢出,在內存中通過字符串分割函數(shù)split進行處理,不會在sql中通過函數(shù)進行拆分,這也符合阿里的規(guī)范,但是如果我們是出報表,通過其他平臺寫sql的方式進行拆分展示,不經過內存字符串分割,這時候我們只能通過sql 函數(shù)substring_index來處理,下面介紹2種方式

解決方案

創(chuàng)建表

create table tb_staff_position_info
(
    id                 varchar(255)                           not null comment '主鍵'
        primary key,
    created_at         timestamp    default CURRENT_TIMESTAMP not null comment '記錄創(chuàng)建時間',
    updated_at         timestamp    default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '記錄修改時間',
   staff_name    varchar(64)  default ''                not null comment '員工名稱',
   position_name    varchar(64)  default ''                not null comment '多個職位以,號分割',
  
)
    comment '員工職位表' charset = utf8;

初始化數(shù)據(jù)

insert into tb_staff_position_info(staff_name,position_name)values
('小平','技術組長,產品經理,項目經理'),('小花','程序員,測試員,'),('小廣‘,'研發(fā)總監(jiān)')

預期查詢

查詢員工所屬的職位,多個職位顯示多行

整體思路

1、將position_name 以","號進行拆分,使用mysql 的substring_index(clunm,拆分字符,第幾個n) 函數(shù),substring_index函數(shù)每次只能獲取一個職位

2、借助臨時表,從0開始自增,數(shù)據(jù)中最多有多少個分割字符,臨時表就有多少條數(shù)據(jù)

方案一

借助mysql 的自增表,如下

select 
  info.staff_name,
  substring_index(
        substring_index(
            info.position_name ,
            ',',
            b.n + 1
        ),
        ',' ,- 1
    ) AS position_name
  from tb_staff_position_info info
  join mysql.help_topic b  
on b.help_topic_id < ( length(info.position_name ) - length(REPLACE (info.position_name , ',', ''))  + 1 ) 

臨時表借助于mysql的help_topic 表中的 help_topic_id來實現(xiàn)

方案二

有時候查詢用戶的權限無法訪問mysql的表,那么我們也可以創(chuàng)建一個臨時表替換,如下所示

select 
  info.staff_name,
  substring_index(
        substring_index(
            info.position_name ,
            ',',
            b.n + 1
        ),
        ',' ,- 1
    ) AS position_name
  from tb_staff_position_info info
  join (
          select 0 as n
          union all 
          select 1 as n
          union all 
          select 2 as n
          ) b 
         on b.n < ( length(info.position_name ) - length(REPLACE (info.position_name , ',', ''))  + 1 )

上述創(chuàng)建的臨時表b 最多能匹配 3個分割符,如果存在大于3個那么在將數(shù)據(jù)插入到臨時表即可

方案三

臨時表變成正式表,在數(shù)據(jù)庫中創(chuàng)建一張自增表

總結

上述方式各有千秋,下面總結優(yōu)缺點

優(yōu)缺點

方法一:

優(yōu)點:臨時表借助mysql 內置的help_topic 表,無需自己創(chuàng)建臨時表

缺點:存在查詢賬號權限的限制,有的賬號是無法訪問mysql內置表

方法二:

優(yōu)點:創(chuàng)建自增的臨時表不存在權限的限制

缺點:如果分割符存在多個,就要插入多條數(shù)據(jù),寫法上沒有方法一整潔優(yōu)雅

到此這篇關于Mysql中substring_index函數(shù)實現(xiàn)字符分割一行變多行的文章就介紹到這了,更多相關Mysql 字符分割內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mysql建表與索引使用規(guī)范詳解

    Mysql建表與索引使用規(guī)范詳解

    本篇文章是對Mysql建表和索引使用規(guī)范進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL建表設置默認值的取值范圍

    MySQL建表設置默認值的取值范圍

    這篇文章主要介紹了MySQL建表設置默認值的取值范圍,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • SQL實現(xiàn)對數(shù)據(jù)庫檢索數(shù)據(jù)的直接轉換計算

    SQL實現(xiàn)對數(shù)據(jù)庫檢索數(shù)據(jù)的直接轉換計算

    這篇文章主要介紹了SQL實現(xiàn)對數(shù)據(jù)庫檢索數(shù)據(jù)的直接轉換計算,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • MySQL遞歸查找樹形結構(這個方法太實用了!)

    MySQL遞歸查找樹形結構(這個方法太實用了!)

    對于數(shù)據(jù)庫中的樹形結構數(shù)據(jù),如部門表,有時候,我們需要知道某部門的所有下屬部分或者某部分的所有上級部門,這時候就需要用到mysql的遞歸查詢,下面這篇文章主要給大家介紹了關于MySQL遞歸查找樹形結構的相關資料,需要的朋友可以參考下
    2022-11-11
  • 與MSSQL對比學習MYSQL的心得(八)--插入 更新 刪除

    與MSSQL對比學習MYSQL的心得(八)--插入 更新 刪除

    這一篇《與MSSQL對比學習MYSQL的心得(八)》將會講解MYSQL的插入、更新和刪除語句
    2014-08-08
  • Mysql和SQLServer驅動連接的實現(xiàn)步驟

    Mysql和SQLServer驅動連接的實現(xiàn)步驟

    本文主要介紹了Mysql和SQL?Server的驅動連接,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • MySQL中根據(jù)出生日期計算年齡兩種方法

    MySQL中根據(jù)出生日期計算年齡兩種方法

    使用SQL語句計算年齡,在事務處理和日期計算中,較為常見,下面這篇文章主要給大家介紹了關于MySQL中根據(jù)出生日期計算年齡的兩種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • MySQL?Prepared?Statement?預處理的操作方法

    MySQL?Prepared?Statement?預處理的操作方法

    預處理語句是一種在數(shù)據(jù)庫管理系統(tǒng)中使用的編程概念,用于執(zhí)行對數(shù)據(jù)庫進行操作的?SQL?語句,這篇文章主要介紹了MySQL?Prepared?Statement?預處理?,需要的朋友可以參考下
    2024-08-08
  • mysql root密碼的重設方法(親測可用)

    mysql root密碼的重設方法(親測可用)

    這篇文章主要介紹了如何重設mysql root密碼,需要的朋友可以參考下
    2014-02-02
  • MySQL使用MD5加密算法進行數(shù)據(jù)加密功能

    MySQL使用MD5加密算法進行數(shù)據(jù)加密功能

    在現(xiàn)代的數(shù)據(jù)庫應用中,數(shù)據(jù)的安全性和隱私性變得尤為重要,MySQL作為最流行的關系型數(shù)據(jù)庫之一,提供了多種加密功能,允許用戶對數(shù)據(jù)進行加密和解密操作,在這篇文章中,我們將深入探討MySQL的加密功能,并重點介紹如何使用MD5加密算法進行加密,需要的朋友可以參考下
    2024-12-12

最新評論