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

MySql 字符串中提取數(shù)字的實(shí)現(xiàn)示例

 更新時(shí)間:2023年09月20日 11:02:55   作者:菜鳥小杰子  
在MySQL中,有時(shí)需要從字符串中提取數(shù)字,本文就來介紹一下MySql 字符串中提取數(shù)字的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下

一、前言

在MySQL中,有時(shí)需要從字符串中提取數(shù)字。在這種情況下,我們可以使用一些函數(shù)來實(shí)現(xiàn)該效果。但是,這些函數(shù)中的一些可能會(huì)提取字符串中的所有數(shù)字,而其他函數(shù)可能只會(huì)提取最長(zhǎng)的數(shù)字字符序列。因此,我們需要了解每個(gè)函數(shù)的行為及其應(yīng)用場(chǎng)景。

二、mysql 內(nèi)置函數(shù)

1. REGEXP_REPLACE()函數(shù)

REGEXP_REPLACE()函數(shù)可以用于從字符串中刪除任何不是數(shù)字的字符,留下數(shù)字字符。以下是一個(gè)例子:

SELECT REGEXP_REPLACE("abc123def456", '[^0-9]', '');
// Output: 123456

其中的正則表達(dá)式[^0-9]表示是否出現(xiàn)除0-9以外的字符,替換掉原來的字符串中的所有非數(shù)字字符。

2. REGEXP_SUBSTR()函數(shù)

REGEXP_SUBSTR()函數(shù)可以用于從字符串中提取匹配正則表達(dá)式的字串。以下是一個(gè)例子:

SELECT REGEXP_SUBSTR("name123_phone456", '[0-9]+');
// Output: 123

其中的正則表達(dá)式[0-9]+表示會(huì)選擇字符串中的一個(gè)或多個(gè)數(shù)字。

3. SUBSTRING()函數(shù)結(jié)合正則表達(dá)式

另一種方法是使用SUBSTRING()函數(shù)和正則表達(dá)式,可以從字符串中提取數(shù)字序列。以下是一個(gè)例子:

SELECT SUBSTRING("abc123def456",LOCATE("123", "abc123def456"), 
    LOCATE("456", "abc123def456")-LOCATE("123", "abc123def456")+1);
// Output: 123def456

其中LOCATE()函數(shù)用于找到字符串中某個(gè)子字符串的位置,然后使用SUBSTRING()函數(shù)從該位置開始提取包含在“123”和“456”之間的字符串。如果你想要提取數(shù)字序列,請(qǐng)使用正則表達(dá)式。

三、自定義函數(shù)

下面是一個(gè)基于循環(huán)的MySQL自定義函數(shù),用于從輸入的字符串中提取所有數(shù)字字符并將其組合成一個(gè)整數(shù):

一、函數(shù)1

DROP FUNCTION IF EXISTS `number_extract`;
DELIMITER $$
CREATE FUNCTION `number_extract`(string_inport VARCHAR(255)) 
RETURNS INT
NO SQL
BEGIN
    DECLARE ctrNumber VARCHAR(255);
    DECLARE finNumber VARCHAR(255) DEFAULT '';
    DECLARE sChar VARCHAR(1);
    DECLARE inti INTEGER DEFAULT 1;
    IF LENGTH(string_inport) > 0 THEN
        WHILE(inti <= LENGTH(string_inport)) DO
            SET sChar = SUBSTRING(string_inport, inti, 1);
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9'); 
            IF ctrNumber > 0 THEN
                SET finNumber = CONCAT(finNumber, sChar);
            END IF;
            SET inti = inti + 1;
        END WHILE;
        RETURN CAST(finNumber AS UNSIGNED);
    ELSE
        RETURN 0;
    END IF;    
END$$
DELIMITER ;

該函數(shù)接受一個(gè)VARCHAR(255)類型的字符串參數(shù),并返回一個(gè)整數(shù)值。函數(shù)使用了一個(gè)while循環(huán)來遍歷字符串中的每個(gè)字符。如果字符是數(shù)字,則將其添加到finNumber字符串中。在循環(huán)結(jié)束后,使用MySQL內(nèi)置的CAST()函數(shù)將finNumber字符串轉(zhuǎn)換為整數(shù)類型。

二、函數(shù)2

如果需要從輸入的字符串中提取特定數(shù)量的連續(xù)數(shù)字字符并將其組合成一個(gè)整數(shù),我們可以使用兩個(gè)自定義函數(shù)。

DROP FUNCTION IF EXISTS `number_extract_n1`;
DELIMITER $$
CREATE FUNCTION `number_extract_n1`(string_inport VARCHAR(255), num_digits INT) 
RETURNS INT
NO SQL
BEGIN
    DECLARE ctrNumber VARCHAR(255);
    DECLARE finNumber VARCHAR(255) DEFAULT '';
    DECLARE sChar VARCHAR(1);
    DECLARE inti INTEGER DEFAULT 1;
    IF LENGTH(string_inport) > 0 AND num_digits > 0 THEN
        WHILE(inti <= LENGTH(string_inport)) DO
            SET sChar = SUBSTRING(string_inport, inti, 1);
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9'); 
            IF ctrNumber > 0 THEN
                SET finNumber = CONCAT(finNumber, sChar);
                IF LENGTH(finNumber) = num_digits THEN
                    SET inti = LENGTH(string_inport)+1;
                END IF;
            END IF;
            SET inti = inti + 1;
        END WHILE;
        RETURN CAST(finNumber AS UNSIGNED);
    ELSE
        RETURN 0;
    END IF;    
END$$
DELIMITER ;

該函數(shù)接受兩個(gè)參數(shù),一個(gè)VARCHAR(255)類型的字符串和一個(gè)INT類型的數(shù)字。函數(shù)返回一個(gè)整數(shù),該整數(shù)由輸入字符串中的指定數(shù)量的連續(xù)數(shù)字字符組成。

函數(shù)遍歷輸入的字符串并掃描每個(gè)字符,如果字符是數(shù)字,則將其添加到finNumber字符串中。在finNumber中包含所需數(shù)量的數(shù)字字符時(shí),函數(shù)將循環(huán)終止并返回finNumber轉(zhuǎn)換為整數(shù)類型的值。

三、函數(shù)3

DROP FUNCTION IF EXISTS `number_extract_n2`;
DELIMITER $$
CREATE FUNCTION `number_extract_n2`(string_inport VARCHAR(255), start_idx INT, num_digits INT) 
RETURNS INT
NO SQL
BEGIN
    DECLARE ctrNumber VARCHAR(255);
    DECLARE finNumber VARCHAR(255) DEFAULT '';
    DECLARE sChar VARCHAR(1);
    DECLARE inti INTEGER DEFAULT start_idx;
    DECLARE end_idx INTEGER DEFAULT start_idx + num_digits;
    IF LENGTH(string_inport) &gt; 0 AND num_digits &gt; 0 AND end_idx &lt;= LENGTH(string_inport) THEN
        WHILE(inti &lt;= end_idx) DO
            SET sChar = SUBSTRING(string_inport, inti, 1);
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9'); 
            IF ctrNumber &gt; 0 THEN
                SET finNumber = CONCAT(finNumber, sChar);
            ELSE
                RETURN 0;
            END IF;
            SET inti = inti + 1;
        END WHILE;
        RETURN CAST(finNumber AS UNSIGNED);
    ELSE
        RETURN 0;
    END IF;    
END$$
DELIMITER ;

該函數(shù)接受三個(gè)參數(shù),一個(gè)VARCHAR(255)類型的字符串,一個(gè)INT類型的數(shù)字表示起始索引值,一個(gè)INT類型的數(shù)字表示要提取的數(shù)字字符的數(shù)量。

函數(shù)遍歷輸入字符串的子字符串,并掃描每個(gè)字符,如果字符是數(shù)字,則將其添加到finNumber字符串中。如果finNumber包含所需數(shù)量的數(shù)字字符,則函數(shù)將返回finNumber字符串轉(zhuǎn)換為整數(shù)類型的值。如果沒有提取到足夠數(shù)量的連續(xù)數(shù)字字符,函數(shù)將返回0。

 四、后語

我們介紹了三個(gè)自定義函數(shù)以及MySQL內(nèi)置函數(shù)REGEXP_REPLACE()、REGEXP_SUBSTR()和SUBSTRING(),這些函數(shù)可以從輸入的字符串中提取數(shù)字。我們還了解了每個(gè)函數(shù)的行為及其應(yīng)用場(chǎng)景。

REGEXP_REPLACE()函數(shù)可用于從字符串中刪除任何不是數(shù)字的字符,留下數(shù)字字符。

REGEXP_SUBSTR()函數(shù)可用于從字符串中提取匹配正則表達(dá)式的字串。

SUBSTRING()函數(shù)結(jié)合正則表達(dá)式可以從字符串中提取數(shù)字序列。

自定義函數(shù)1可以從字符串中提取所有數(shù)字字符并將其組合成一個(gè)整數(shù)。

自定義函數(shù)2和3可用于從輸入的字符串中提取連續(xù)數(shù)字字符,并將其組合成一個(gè)指定數(shù)量的整數(shù)。

選擇適當(dāng)?shù)暮瘮?shù)來提取數(shù)字字符是十分重要的,取決于我們需要哪些數(shù)字字符以及是否必須是連續(xù)的數(shù)字字符。在實(shí)際應(yīng)用中,應(yīng)該根據(jù)實(shí)際情況進(jìn)行選擇,以便快速高效地實(shí)現(xiàn)所需的結(jié)果。

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

相關(guān)文章

  • MySQL 跨庫查詢示例場(chǎng)景分析

    MySQL 跨庫查詢示例場(chǎng)景分析

    在 MySQL 數(shù)據(jù)庫應(yīng)用場(chǎng)景中,有時(shí)需要從多個(gè)數(shù)據(jù)庫中獲取數(shù)據(jù)并進(jìn)行關(guān)聯(lián)分析或綜合處理,這就涉及到跨庫查詢操作,本指南將詳細(xì)介紹 MySQL 跨庫查詢的方法、注意事項(xiàng)以及相關(guān)示例,感興趣的朋友一起看看吧
    2025-04-04
  • mysql常用函數(shù)與視圖索引全面梳理

    mysql常用函數(shù)與視圖索引全面梳理

    這篇文章主要介紹了mysql的常用函數(shù)與視圖索引的特點(diǎn)與作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • PHP定時(shí)備份MySQL與mysqldump語法參數(shù)詳解

    PHP定時(shí)備份MySQL與mysqldump語法參數(shù)詳解

    本文為大家介紹了PHP利用mysqldump命令定時(shí)備份MySQL與mysqldump語法參數(shù)大全以及定時(shí)備份的PHP實(shí)例代碼
    2018-10-10
  • mysql版本5.5.x升級(jí)到5.6.x步驟分享

    mysql版本5.5.x升級(jí)到5.6.x步驟分享

    在我做的一個(gè)項(xiàng)目中,最近我對(duì)生產(chǎn)服務(wù)器上的一系列系統(tǒng)軟件進(jìn)行了升級(jí),包括git、nginx、MySQL和PHP。這篇文章講的是升級(jí)MySQL的過程,其他軟件的升級(jí)將在其他文章中介紹。
    2016-01-01
  • MySQL?強(qiáng)制使用特定索引的操作

    MySQL?強(qiáng)制使用特定索引的操作

    MySQL可通過FORCEINDEX、USEINDEX等語法強(qiáng)制查詢使用特定索引,但優(yōu)化器可能不采納,需結(jié)合EXPLAIN分析執(zhí)行計(jì)劃,避免性能下降,注意版本差異,建議優(yōu)化索引結(jié)構(gòu)而非強(qiáng)制使用,本文介紹MySQL?強(qiáng)制使用特定索引的操作,感興趣的朋友一起看看吧
    2025-07-07
  • 一文詳解如何在MySQL中創(chuàng)建函數(shù)

    一文詳解如何在MySQL中創(chuàng)建函數(shù)

    這篇文章主要為大家介紹了一文詳解如何在MySQL中創(chuàng)建函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL產(chǎn)生隨機(jī)數(shù)并連接字符串的方法示例

    MySQL產(chǎn)生隨機(jī)數(shù)并連接字符串的方法示例

    這篇文章主要介紹了MySQL產(chǎn)生隨機(jī)數(shù)并連接字符串的方法,簡(jiǎn)單分析了相關(guān)函數(shù),并結(jié)合實(shí)例形式給出了相應(yīng)的SQL語句實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-05-05
  • MySQL中慢SQL優(yōu)化的不同方式介紹

    MySQL中慢SQL優(yōu)化的不同方式介紹

    慢 SQL 的優(yōu)化,主要從兩個(gè)方面考慮,SQL 語句本身的優(yōu)化,以及數(shù)據(jù)庫設(shè)計(jì)的優(yōu)化,下面小編就來給大家介紹一下有哪些方式可以優(yōu)化慢 SQL吧
    2025-03-03
  • MySQL數(shù)據(jù)庫高級(jí)查詢和多表查詢

    MySQL數(shù)據(jù)庫高級(jí)查詢和多表查詢

    這篇文章主要介紹了MySQL數(shù)據(jù)庫高級(jí)查詢和多表查詢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mysql創(chuàng)建數(shù)據(jù)庫,添加用戶,用戶授權(quán)實(shí)操方法

    mysql創(chuàng)建數(shù)據(jù)庫,添加用戶,用戶授權(quán)實(shí)操方法

    在本篇文章里小編給大家整理的是關(guān)于mysql創(chuàng)建數(shù)據(jù)庫,添加用戶,用戶授權(quán)實(shí)操方法相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-10-10

最新評(píng)論

清丰县| 皋兰县| 开化县| 沈阳市| 徐州市| 卢氏县| 东宁县| 舒城县| 汉中市| 富裕县| 武山县| 澄迈县| 浮山县| 客服| 苍南县| 吴桥县| 屏东县| 新泰市| 黔南| 罗田县| 武川县| 镇江市| 元氏县| 德阳市| 九龙城区| 贵港市| 称多县| 天津市| 长海县| 抚松县| 自贡市| 余庆县| 岚皋县| 莱阳市| 乐陵市| 长泰县| 尼勒克县| 威宁| 监利县| 河间市| 甘孜县|