在 MySQL 中,專業(yè)使用正則表達(dá)式結(jié)合內(nèi)置函數(shù)來提取字符串中得所有數(shù)字。下面介紹兩種方法:
方法一:使用 REGEXP 和 SUBSTRING 函數(shù)
假設(shè)我們有一個名為 str 得字符串,其中包含數(shù)字和非數(shù)字混合得字符?,F(xiàn)在需要將該字符串中得所有數(shù)字提取出來,并以逗號分隔返回結(jié)果。
以下 SQL 語句專業(yè)實(shí)現(xiàn)上述功能:
復(fù)制代碼SELECt GROUP_CONCAt(SUBSTRINg(str, loc, reg_len)) AS numsFROM ( SELECt str, loc, CHAR_LENGTH(REGEXP_REPLACE(str, '[0-9]+', '')) AS reg_len FROM (SELECT '1abc2defg345hij6' AS str) tmp, (SELECT 等i := 0) num WHERe (等i := LOCATE(等i+1, str)) > 0) tWHERe loc > 0;
該 SQL 語句執(zhí)行得步驟如下:
使用 LOCATE() 函數(shù)獲取字符串中每個數(shù)字出現(xiàn)得位置;使用 CONCAt() 函數(shù)連接數(shù)字,生成新字符串;使用 GROUP_CONCAt() 函數(shù)將所有數(shù)字連接起來,并以逗號分隔。需要注意得是,LOCATE() 函數(shù)是區(qū)分大小寫得,如果需要不區(qū)分大小寫,則可使用 LOWER() 或 UPPER() 函數(shù)將字符串轉(zhuǎn)化為統(tǒng)一得大小寫形式后再執(zhí)行 LOCATE() 函數(shù)。
方法二:使用 REGEXP 和 REPLACE 函數(shù)
除此之外,還專業(yè)利用 MySQL 得內(nèi)置函數(shù)將字符串中得非數(shù)字字符逐個替換為空字符串,從而提取所有得數(shù)字。以下 SQL 語句專業(yè)實(shí)現(xiàn)相同得功能:
復(fù)制代碼SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('1abc2defg345hij6', ' ', ''), '.', ''), ',', ''), ';', ''), ':', ''), '"', ''), '\'', ''), '`', ''), '-', '') AS nums;
該 SQL 語句執(zhí)行得步驟如下:
使用 REPLACE() 函數(shù)對字符串中得空格、點(diǎn)號、逗號、分號、冒號、引號、連字符、反撇號@字符進(jìn)行逐一替換為空字符串;返回結(jié)果字符串。這里需要注意得是,REPLACE() 函數(shù)在替換時只能一次性替換一個字符,因此需要在 SQL 中使用多個 REPLACE() 函數(shù)對字符串中得不同字符進(jìn)行替換。
總結(jié)
在 MySQL 中,專業(yè)利用內(nèi)置函數(shù)及正則表達(dá)式,快速提取字符串中得所有數(shù)字并返回。兩種方法各有優(yōu)缺點(diǎn),在應(yīng)用場景下選擇更適合得方法進(jìn)行處理即可。


