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

MySQL中的字符串分割函數(shù)及基本用法詳解

 更新時(shí)間:2025年07月11日 11:06:39   作者:羚風(fēng)雯  
MySQL本身沒有內(nèi)置的SPLIT()函數(shù),但可以通過(guò)其他方式實(shí)現(xiàn)字符串分割功能,下面給大家介紹MySQL中的字符串分割函數(shù)及基本用法,感興趣的朋友一起看看吧

MySQL中的字符串分割函數(shù)

MySQL本身沒有內(nèi)置的SPLIT()函數(shù),但可以通過(guò)其他方式實(shí)現(xiàn)字符串分割功能。以下是幾種常見的方法:

1. SUBSTRING_INDEX函數(shù)

SUBSTRING_INDEX()是MySQL中最常用的字符串分割函數(shù),它可以根據(jù)指定的分隔符從字符串中提取子串,語(yǔ)法如下:

SUBSTRING_INDEX(str, delim, count)
  • 含義:返回字符串 str 中按分隔符 delim 分割后的第 count 個(gè)子串。
  • str: 要分割的字符串
  • delim: 分隔符(可以是單個(gè)字符或多個(gè)字符)
  • count:
    • 正數(shù):返回從左邊開始第count個(gè)分隔符之前的所有內(nèi)容
    • 負(fù)數(shù):返回從右邊開始第count個(gè)分隔符之后的所有內(nèi)容

1、基本用法

-- 獲取第一個(gè)逗號(hào)前的內(nèi)容
SELECT SUBSTRING_INDEX('apple,banana,orange', ',', 1); 
-- 結(jié)果: 'apple'
-- 獲取最后一個(gè)逗號(hào)后的內(nèi)容
SELECT SUBSTRING_INDEX('apple,banana,orange', ',', -1); 
-- 結(jié)果: 'orange'
-- 獲取前兩個(gè)元素
SELECT 
  SUBSTRING_INDEX('apple,banana,orange', ',', 1) AS item1,
  SUBSTRING_INDEX(SUBSTRING_INDEX('apple,banana,orange', ',', 2), ',', -1) AS item2;
-- 結(jié)果: item1='apple', item2='banana'

2. 處理多字符分隔符

-- 使用多字符作為分隔符
SELECT SUBSTRING_INDEX('apple||banana||orange', '||', 2);
-- 結(jié)果: 'apple||banana'
SELECT SUBSTRING_INDEX('apple||banana||orange', '||', -1);
-- 結(jié)果: 'orange'
  • 找到第一個(gè) || 在 apple||banana||orange 的 apple 之后,此時(shí)已找到1次分隔符
  • 找到第二個(gè) || 在 banana 之后,此時(shí)已找到2次分隔符(達(dá)到count值)
  • 函數(shù)返回從開頭到第二個(gè) || 之前的所有內(nèi)容:‘apple||banana’

3. 邊界情況處理

-- 分隔符不存在時(shí)返回原字符串
SELECT SUBSTRING_INDEX('apple_banana_orange', ',', 1);
-- 結(jié)果: 'apple_banana_orange'
-- count超過(guò)實(shí)際分隔數(shù)時(shí)返回整個(gè)字符串
SELECT SUBSTRING_INDEX('apple,banana', ',', 5);
-- 結(jié)果: 'apple,banana'
-- 空字符串處理
SELECT SUBSTRING_INDEX('', ',', 1);
-- 結(jié)果: ''

2. 使用正則表達(dá)式:REGEXP_SUBSTR

MySQL 8.0及以上版本支持正則表達(dá)式函數(shù):

-- 使用REGEXP_SUBSTR提取匹配的子串
SELECT REGEXP_SUBSTR('apple,banana,orange', '[^,]+', 1, 1) AS item1,
       REGEXP_SUBSTR('apple,banana,orange', '[^,]+', 1, 2) AS item2;
-- 結(jié)果: item1='apple', item2='banana'

3. 使用存儲(chǔ)過(guò)程實(shí)現(xiàn)完整分割

如果需要將字符串完全分割成多行,可以創(chuàng)建存儲(chǔ)過(guò)程:

DELIMITER //
CREATE PROCEDURE split_string(IN input_string VARCHAR(1000), IN delimiter_char VARCHAR(1))
BEGIN
    DECLARE temp_string VARCHAR(1000);
    DECLARE i INT DEFAULT 1;
    DECLARE item VARCHAR(1000);
    SET temp_string = input_string;
    WHILE LENGTH(temp_string) > 0 DO
        SET item = SUBSTRING_INDEX(temp_string, delimiter_char, 1);
        SELECT item AS split_result;
        SET temp_string = SUBSTRING(temp_string, LENGTH(item) + 2);
        IF LENGTH(temp_string) = 0 THEN
            LEAVE;
        END IF;
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;
-- 調(diào)用存儲(chǔ)過(guò)程
CALL split_string('apple,banana,orange', ',');

4. 使用JSON函數(shù)(MySQL 5.7+)

MySQL 5.7及以上版本可以使用JSON函數(shù)處理字符串分割:

-- 將逗號(hào)分隔的字符串轉(zhuǎn)為JSON數(shù)組
SELECT 
  JSON_UNQUOTE(JSON_EXTRACT(CONCAT('["', REPLACE('apple,banana,orange', ',', '","'), '"]'), '$[0]')) AS item1,
  JSON_UNQUOTE(JSON_EXTRACT(CONCAT('["', REPLACE('apple,banana,orange', ',', '","'), '"]'), '$[1]')) AS item2;
-- 結(jié)果: item1='apple', item2='banana'

實(shí)際應(yīng)用示例

假設(shè)有一個(gè)表格包含逗號(hào)分隔的標(biāo)簽字段:

CREATE TABLE products (
    id INT,
    name VARCHAR(100),
    tags VARCHAR(255)
);
INSERT INTO products VALUES 
(1, 'Laptop', 'electronics,computer,premium'),
(2, 'Phone', 'electronics,mobile'),
(3, 'Desk', 'furniture,office');
-- 查詢所有電子類產(chǎn)品
SELECT * FROM products 
WHERE FIND_IN_SET('electronics', tags) > 0;

注意:對(duì)于復(fù)雜的字符串分割需求,建議在應(yīng)用層處理(如Python、Java等),或者在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)就避免使用分隔符存儲(chǔ)多個(gè)值(遵循第一范式)。

練習(xí)題

統(tǒng)計(jì)每種性別的人數(shù)

select
    SUBSTRING_INDEX (profile, ',', -1) as gender,
    count(*) as number
from
    user_submit 
group by
    gender

提取博客URL中的用戶名

select
    device_id,
    substring_index (blog_url, "/", -1) as user_name
from
    user_submit

截取出年齡

select
    substring_index (substring_index (profile, ",", 3), ",", -1) as age,
    count(*) as number
from
    user_submit
group by
    age

SQL83 商品id數(shù)據(jù)清洗統(tǒng)計(jì)

select
    # SUBSTRING_INDEX (order_id, '_', -1) as product_id,
    regexp_substr(order_id,'p[0-9]+$') as product_id,
    count(*) as cnt
from order_log
group by product_id
order by cnt desc,product_id asc;
  • ‘p[0-9]+$’: 正則表達(dá)式模式
  • p: 匹配字母 “p”
  • [0-9]+: 匹配一個(gè)或多個(gè)數(shù)字(0-9)
  • $: 匹配字符串的結(jié)尾

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

相關(guān)文章

  • MYSQL時(shí)區(qū)導(dǎo)致時(shí)間差了14或13小時(shí)的解決方法

    MYSQL時(shí)區(qū)導(dǎo)致時(shí)間差了14或13小時(shí)的解決方法

    本文主要介紹了MYSQL時(shí)區(qū)導(dǎo)致時(shí)間差了14或13小時(shí)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 高效數(shù)據(jù)流轉(zhuǎn):Mycat分庫(kù)分表與GreatSQL實(shí)時(shí)同步

    高效數(shù)據(jù)流轉(zhuǎn):Mycat分庫(kù)分表與GreatSQL實(shí)時(shí)同步

    聚焦數(shù)據(jù)庫(kù)擴(kuò)容與實(shí)時(shí)數(shù)據(jù)同步,探索MyCat分庫(kù)分表與GreatSQL的強(qiáng)大結(jié)合!想在大規(guī)模數(shù)據(jù)處理中游刃有余?本指南將帶你輕松掌握MyCat的分布式解決方案和GreatSQL的實(shí)時(shí)同步機(jī)制,讓高效、穩(wěn)定的數(shù)據(jù)庫(kù)管理觸手可及,一起揭開高并發(fā)環(huán)境下數(shù)據(jù)庫(kù)優(yōu)化的神秘面紗吧!
    2024-01-01
  • MySQL 全文索引的原理與缺陷

    MySQL 全文索引的原理與缺陷

    這篇文章主要介紹了MySQL 全文索引的原理與缺陷,幫助大家更好的理解和使用MySQL中的索引,感興趣的朋友可以了解下
    2020-12-12
  • 理解MySQL——索引與優(yōu)化總結(jié)

    理解MySQL——索引與優(yōu)化總結(jié)

    本篇文章主要介紹了MySQL——索引與優(yōu)化,索引對(duì)查詢的速度有著至關(guān)重要的影響,理解索引也是進(jìn)行數(shù)據(jù)庫(kù)性能調(diào)優(yōu)的起點(diǎn)。有興趣的可以了解一下。
    2016-12-12
  • mysql 查詢表中平均分最低的班級(jí)

    mysql 查詢表中平均分最低的班級(jí)

    查詢出dd(user_id,class_no,score)這個(gè)表中平均分最低的班級(jí)?
    2009-07-07
  • mysql時(shí)間戳轉(zhuǎn)成常用可讀時(shí)間格式的兩種方法

    mysql時(shí)間戳轉(zhuǎn)成常用可讀時(shí)間格式的兩種方法

    mysql時(shí)間戳轉(zhuǎn)成常用可讀時(shí)間格式的兩種方法,需要的朋友可以參考下。
    2010-09-09
  • Finished with error:Navicat運(yùn)行SQL文件報(bào)錯(cuò)的解決

    Finished with error:Navicat運(yùn)行SQL文件報(bào)錯(cuò)的解決

    這篇文章主要介紹了Finished with error:Navicat運(yùn)行SQL文件報(bào)錯(cuò)的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析

    MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析

    這篇文章主要介紹了MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析,并且簡(jiǎn)單介紹了updatexml函數(shù),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能

    使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能

    這篇文章主要介紹了使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下方法
    2020-03-03
  • 登錄mysql時(shí)出現(xiàn)的閃退問題解決

    登錄mysql時(shí)出現(xiàn)的閃退問題解決

    大家在打開MySQL時(shí),可能會(huì)遇到在登陸界面輸入密碼之后就閃退的這個(gè)問題,下面這篇文章主要給大家介紹了關(guān)于如何解決登錄mysql時(shí)出現(xiàn)的閃退問題的相關(guān)資料,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

吉木乃县| 清河县| 咸丰县| 蒙山县| 克山县| 花莲市| 乐东| 黄浦区| 浏阳市| 伊川县| 南江县| 绍兴市| 新邵县| 韶山市| 乌兰察布市| 灵武市| 宜兴市| 本溪| 禄丰县| 贞丰县| 桐梓县| 景东| 岱山县| 慈利县| 泾阳县| 南丰县| 景东| 盐边县| 鲜城| 什邡市| 江川县| 天长市| 霍邱县| 晋江市| 武定县| 革吉县| 林西县| 祁门县| 济阳县| 密云县| 上栗县|