欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、前言

在MySQL中,有時(shí)需要從字符串中提取數(shù)字。在這種情況下,我們可以使用一些函數(shù)來(lái)實(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以外的字符,替換掉原來(lái)的字符串中的所有非數(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ù)從該位置開(kāi)始提取包含在“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)類(lèi)型的字符串參數(shù),并返回一個(gè)整數(shù)值。函數(shù)使用了一個(gè)while循環(huán)來(lái)遍歷字符串中的每個(gè)字符。如果字符是數(shù)字,則將其添加到finNumber字符串中。在循環(huán)結(jié)束后,使用MySQL內(nèi)置的CAST()函數(shù)將finNumber字符串轉(zhuǎn)換為整數(shù)類(lèi)型。

二、函數(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)類(lèi)型的字符串和一個(gè)INT類(lèi)型的數(shù)字。函數(shù)返回一個(gè)整數(shù),該整數(shù)由輸入字符串中的指定數(shù)量的連續(xù)數(shù)字字符組成。

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

三、函數(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)類(lèi)型的字符串,一個(gè)INT類(lèi)型的數(shù)字表示起始索引值,一個(gè)INT類(lèi)型的數(shù)字表示要提取的數(shù)字字符的數(shù)量。

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

 四、后語(yǔ)

我們介紹了三個(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ù)來(lái)提取數(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占用CPU過(guò)高的解決辦法(添加索引)

    mysql占用CPU過(guò)高的解決辦法(添加索引)

    下面是MYSQL占用CPU高處理的一個(gè)例子,希望對(duì)遇到類(lèi)似問(wèn)題的朋友們有點(diǎn)啟發(fā)。一般來(lái)說(shuō)MYQL占用CPU高,多半是數(shù)據(jù)庫(kù)查詢(xún)代碼問(wèn)題,查詢(xún)數(shù)據(jù)庫(kù)過(guò)多。所以一方面要精簡(jiǎn)代碼,另一方面最好對(duì)頻繁使用的代碼設(shè)置索引
    2013-03-03
  • IDEA連接mysql時(shí)區(qū)問(wèn)題解決

    IDEA連接mysql時(shí)區(qū)問(wèn)題解決

    在使用MySQL數(shù)據(jù)庫(kù)時(shí),經(jīng)常會(huì)遇到需要設(shè)置時(shí)區(qū)的情況,本文主要介紹了IDEA連接mysql時(shí)區(qū)問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • MySQL數(shù)據(jù)庫(kù)Shell import_table數(shù)據(jù)導(dǎo)入

    MySQL數(shù)據(jù)庫(kù)Shell import_table數(shù)據(jù)導(dǎo)入

    本文我們介紹一款高效的數(shù)據(jù)導(dǎo)入工具,MySQL Shell 工具集中的import_table,該工具的全稱(chēng)是Parallel Table Import Utility,需要的朋友請(qǐng)參考下文
    2021-08-08
  • MySQL異常恢復(fù)之無(wú)主鍵情況下innodb數(shù)據(jù)恢復(fù)的方法

    MySQL異常恢復(fù)之無(wú)主鍵情況下innodb數(shù)據(jù)恢復(fù)的方法

    這篇文章主要介紹了MySQL異?;謴?fù)之無(wú)主鍵情況下innodb數(shù)據(jù)恢復(fù)的方法,結(jié)合實(shí)例形式分析了針對(duì)innodb引擎無(wú)主鍵的情況下恢復(fù)數(shù)據(jù)的步驟與相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • mysql忘記密碼怎么辦

    mysql忘記密碼怎么辦

    mysql忘記密碼怎么辦?這篇文章主要為大家詳細(xì)介紹了MySQL忘記密碼的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • MySQL之FIND_IN_SET()的用法及說(shuō)明

    MySQL之FIND_IN_SET()的用法及說(shuō)明

    這篇文章主要介紹了MySQL之FIND_IN_SET()的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • MySQL配置文件無(wú)法修改的解決方法(Win10)

    MySQL配置文件無(wú)法修改的解決方法(Win10)

    這篇文章主要為大家詳細(xì)介紹了MySQL配置文件無(wú)法修改的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • MySQL查看日志簡(jiǎn)單易懂保姆級(jí)教程

    MySQL查看日志簡(jiǎn)單易懂保姆級(jí)教程

    這篇文章主要給大家介紹了關(guān)于MySQL查看日志簡(jiǎn)單易懂保姆級(jí)教程的相關(guān)資料,在操作MySQL數(shù)據(jù)庫(kù)的時(shí)候會(huì)留下每一個(gè)步驟的痕跡,那怎么查看呢?就可以用日志去查看,需要的朋友可以參考下
    2023-08-08
  • Mysql案例刨析事務(wù)隔離級(jí)別

    Mysql案例刨析事務(wù)隔離級(jí)別

    隔離性其實(shí)比想象要復(fù)雜。在SQL中定義了四種隔離的級(jí)別,每一種隔離級(jí)別都規(guī)定了一個(gè)事務(wù)中的修改,哪些是在事務(wù)內(nèi)和事務(wù)間是可見(jiàn)的,哪些是不可見(jiàn)的。較低級(jí)別的隔離通常來(lái)說(shuō)能承受更高的并發(fā),系統(tǒng)的開(kāi)銷(xiāo)也會(huì)更小
    2021-09-09
  • MySQL xtrabackup 物理備份原理解析

    MySQL xtrabackup 物理備份原理解析

    xtrabackup 是percona公司開(kāi)源的MySQL innodb物理備份工具,支持在線(xiàn)熱備(備份時(shí)不影響數(shù)據(jù)讀寫(xiě)),在工具在業(yè)內(nèi)生產(chǎn)上被大量使用,本次使用xtrabackup 備份的日志和數(shù)據(jù)庫(kù)general 日志來(lái)對(duì)備份的流程和原理進(jìn)行解讀,需要的朋友可以參考下
    2022-12-12

最新評(píng)論