如何从MariaDB的userLabel字段中提取纯数字内容?
在MariaDB中提取userLabel中的数字部分
针对你的需求,这里提供几种适配不同场景的SQL实现方式:
场景1:数字固定在最后一个|分隔符之后
如果目标数字始终是userLabel字段中最后一个|分隔的内容,可以直接使用SUBSTRING_INDEX函数快速提取:
SELECT SUBSTRING_INDEX(userLabel, '|', -1) AS numeric_part FROM cnf_network_function WHERE nfType='du' ORDER BY id DESC LIMIT 1;
SUBSTRING_INDEX(userLabel, '|', -1)的作用是:以|为分隔符,截取字符串的倒数第1段,正好匹配你例子中的123005011。
场景2:最后一段可能混有非数字字符
如果最后一段除了数字还存在其他字符,需要过滤掉非数字内容,可以结合SUBSTRING_INDEX和REGEXP_REPLACE:
SELECT REGEXP_REPLACE(SUBSTRING_INDEX(userLabel, '|', -1), '[^0-9]', '') AS numeric_part FROM cnf_network_function WHERE nfType='du' ORDER BY id DESC LIMIT 1;
REGEXP_REPLACE(..., '[^0-9]', '')会把最后一段中的所有非数字字符替换为空,只保留数字部分。
场景3:提取字符串中所有数字(不考虑位置)
如果需要提取整个userLabel中的所有数字字符(无论位置),可以直接用REGEXP_REPLACE过滤:
SELECT REGEXP_REPLACE(userLabel, '[^0-9]', '') AS numeric_part FROM cnf_network_function WHERE nfType='du' ORDER BY id DESC LIMIT 1;
注意:这种方式会提取字符串中所有数字,比如你例子中的11、1和123005011会被合并成111123005011,仅适用于需要全量数字的场景。
内容的提问来源于stack exchange,提问作者Naresh Ragi
相关产品推荐
相关产品推荐

