最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

問題

有時(shí)候我們表里會(huì)存在某個(gè)字符(例如經(jīng)常用到的,)分割的分割的數(shù)據(jù),但是在使用的時(shí)候要將存在字符分割數(shù)據(jù)拆分,我們一般的做法先從數(shù)據(jù)庫中將數(shù)據(jù)查詢出,在內(nèi)存中通過字符串分割函數(shù)split進(jìn)行處理,不會(huì)在sql中通過函數(shù)進(jìn)行拆分,這也符合阿里的規(guī)范,但是如果我們是出報(bào)表,通過其他平臺(tái)寫sql的方式進(jìn)行拆分展示,不經(jīng)過內(nèi)存字符串分割,這時(shí)候我們只能通過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)建時(shí)間',
    updated_at         timestamp    default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '記錄修改時(shí)間',
   staff_name    varchar(64)  default ''                not null comment '員工名稱',
   position_name    varchar(64)  default ''                not null comment '多個(gè)職位以,號(hào)分割',
  
)
    comment '員工職位表' charset = utf8;

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

insert into tb_staff_position_info(staff_name,position_name)values
('小平','技術(shù)組長,產(chǎn)品經(jīng)理,項(xiàng)目經(jīng)理'),('小花','程序員,測(cè)試員,'),('小廣‘,'研發(fā)總監(jiān)')

預(yù)期查詢

查詢員工所屬的職位,多個(gè)職位顯示多行

整體思路

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

2、借助臨時(shí)表,從0開始自增,數(shù)據(jù)中最多有多少個(gè)分割字符,臨時(shí)表就有多少條數(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 ) 

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

方案二

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

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)建的臨時(shí)表b 最多能匹配 3個(gè)分割符,如果存在大于3個(gè)那么在將數(shù)據(jù)插入到臨時(shí)表即可

方案三

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

總結(jié)

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

優(yōu)缺點(diǎn)

方法一:

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

缺點(diǎn):存在查詢賬號(hào)權(quán)限的限制,有的賬號(hào)是無法訪問mysql內(nèi)置表

方法二:

優(yōu)點(diǎn):創(chuàng)建自增的臨時(shí)表不存在權(quán)限的限制

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

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

相關(guān)文章

  • mysql 無法連接問題的定位和修復(fù)過程分享

    mysql 無法連接問題的定位和修復(fù)過程分享

    開發(fā)的一款網(wǎng)站防護(hù)產(chǎn)品中出現(xiàn)了一個(gè)客戶端上安裝后Mysql每隔一段時(shí)間就出現(xiàn)問題,這個(gè)問題是客戶反饋的,所以需要去復(fù)現(xiàn)和定位
    2013-03-03
  • mysql 5.7.27 安裝配置方法圖文教程

    mysql 5.7.27 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.27 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • MySQL Community Server 8.0.11安裝配置方法圖文教程

    MySQL Community Server 8.0.11安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì) 介紹了MySQL Community Server 8.0.11安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 帶你快速了解SQL窗口函數(shù)

    帶你快速了解SQL窗口函數(shù)

    窗口函數(shù),也叫OLAP函數(shù)(Online Anallytical Processing,聯(lián)機(jī)分析處理),可以對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行實(shí)時(shí)分析處理,下面這篇文章主要給大家介紹了關(guān)于SQL窗口函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • MySQL存儲(chǔ)過程相互調(diào)用并獲得錯(cuò)誤碼示例

    MySQL存儲(chǔ)過程相互調(diào)用并獲得錯(cuò)誤碼示例

    這篇文章主要介紹了MySQL存儲(chǔ)過程相互調(diào)用并獲得錯(cuò)誤碼,需要的朋友可以參考下
    2014-03-03
  • MySQL的match函數(shù)在sp中使用BUG解決分析

    MySQL的match函數(shù)在sp中使用BUG解決分析

    這篇文章主要為大家介紹了MySQL的match函數(shù)在sp中使用BUG解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Mysql的Optimize?table命令使用及說明

    Mysql的Optimize?table命令使用及說明

    在MySQL中,optimizetable命令用來重新整理(InnoDB&MyISAM)表格并優(yōu)化空間利用,它有助于提高查詢速度和性能,此操作應(yīng)謹(jǐn)慎使用,通常只需每月或視情況執(zhí)行,對(duì)于頻繁寫入的表,定期優(yōu)化是必要的,執(zhí)行時(shí)需注意備份數(shù)據(jù)及避免影響在線服務(wù)
    2026-04-04
  • MySQL?8.0.29?安裝配置方法圖文教程(windows?zip版)

    MySQL?8.0.29?安裝配置方法圖文教程(windows?zip版)

    這篇文章主要為大家詳細(xì)介紹了windows?zip版MySQL?8.0.29?安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • MySQL5.7主從復(fù)制詳細(xì)配置教程

    MySQL5.7主從復(fù)制詳細(xì)配置教程

    這篇文章主要介紹了MySQL5.7主從復(fù)制詳細(xì)配置教程的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Mysql忘記root密碼怎么辦

    Mysql忘記root密碼怎么辦

    MySQL有時(shí)候忘記了root密碼是一件傷感的事,下面通過本文給大家介紹Mysql忘記root密碼怎么辦的相關(guān)知識(shí),需要的朋友參考下
    2016-01-01

最新評(píng)論

留坝县| 禄丰县| 积石山| 得荣县| 普定县| 临夏市| 廉江市| 华阴市| 繁昌县| 临沂市| 四子王旗| 涡阳县| 吉林省| 庄浪县| 吉首市| 云梦县| 乐东| 宁城县| 翁源县| 迭部县| 电白县| 乌拉特中旗| 竹溪县| 乌审旗| 灵山县| 郴州市| 九龙县| 黄骅市| 白河县| 玉环县| 上高县| 郸城县| 清新县| 申扎县| 得荣县| 永城市| 浦城县| 江永县| 邵武市| 天镇县| 调兵山市|