300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql 正则截取字符串_mysql字符串查找截取与正则表达式的联合应用 | 学步园

mysql 正则截取字符串_mysql字符串查找截取与正则表达式的联合应用 | 学步园

时间:2021-01-12 17:55:03

相关推荐

mysql 正则截取字符串_mysql字符串查找截取与正则表达式的联合应用 | 学步园

/* 判断字符串里的内容是否是数值类型 ****************************************************

is_double

输入参数:

str: 待分析的字符串

返回: 如果是数值类型就返回1,否则返回0

*/

DELIMITER $$

DROP FUNCTION IF EXISTS is_double$$

CREATE FUNCTION is_double(str VARCHAR(128))

RETURNS INT

BEGIN

DECLARE iResult INT DEFAULT 0;

/*NULL字符串或者空字符串*/

IF str IS NULL OR str = ''THEN

RETURN 0;

END IF;

SELECT str REGEXP '^[[:digit:]]+$|^[[:digit:]]+[\\.][[:digit:]]+$' INTO iResult;

IF iResult = 1 THEN

RETURN 1;

ELSE

RETURN 0;

END IF;

END $$

DELIMITER ;

/* 分割字符串 ****************************************************

sp_report_string_get_val

功能:分割特定格式的字符串:'3.4,3.2,3.0,2.6,1.0',忽略空值或者是不合法的值

限制:以逗号分割,分割单元以数字组成

结果:分割之后 字符串变为'3.2,3.0,2.6,1.0'和3.4

输入输出参数:

prstring: 要分割的字符串

输出参数:

rval: 从字符串中取得的数值

rcode: 返回代码:0:表示成功执行;1:表示没有取到值或者取到的不是数值

*/

DROP PROCEDURE IF EXISTS sp_get_val;

CREATE PROCEDURE sp_get_val(

INOUT prstring VARCHAR(128),

OUT rval DOUBLE,

OUT rcode INT UNSIGNED

)

BEGIN

DECLARE _pos INT UNSIGNED DEFAULT 1; /*','的位置*/

DECLARE _str VARCHAR(128) DEFAULT ''; /*存放取出的字符串,之后将值赋给返回变量*/

SET rval = NULL;

SET rcode = 0;

/*

1)先去除空格

*/

SET prstring = REPLACE(prstring, ' ', '');

IF prstring = '' THEN

SET rcode = 1;

ELSE

IF RIGHT(prstring, 1) != ',' THEN

SET prstring = CONCAT(prstring, ',');

END IF;

/*

2)找到第一个','

*/

WHILE rval IS NULL AND prstring != '' DO

SET _pos = LOCATE(',', prstring);

IF _pos = 0 THEN

SET rcode = 1;

ELSE

SET _str = SUBSTRING(prstring, 1, _pos - 1);

IF is_double(_str) THEN

SET rval = _str;

END IF;

SET prstring = SUBSTRING(prstring, _pos + 1);

END IF;

END WHILE;

END IF;

IF rval IS NULL THEN

SET rcode = 1;

END IF;

END;

测试:

CREATE TABLE test_1(a DOUBLE);

DELIMITER $$

DROP PROCEDURE IF EXISTS sp_test_3$$

CREATE PROCEDURE sp_test_3()

BEGIN

DECLARE _str VARCHAR(128) DEFAULT '1,4,3.5,3.7,3.22a, , a, 34.2, 0, .1, 0., ';

DECLARE _i DOUBLE DEFAULT 0;

DECLARE _j INT UNSIGNED DEFAULT 0;

WHILE _str != '' DO

CALL sp_get_val(_str, _i, _j);

IF _j = 0 THEN

INSERT INTO test_1 VALUES(_i);

END IF;

END WHILE;

END$$

DELIMITER ;

执行:

CALL sp_test_3();

SELECT * FROM test_1;

TRUNCATE test_1;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。