mysql正则提取字符串_mysql字符串查找截取与正则表达式的联合应用
/* 判斷字符串里的內(nèi)容是否是數(shù)值類型 ****************************************************
is_double
輸入?yún)?shù):
str:?? ??? ??? ?待分析的字符串
返回:?? ??? ??? ??? ?如果是數(shù)值類型就返回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',忽略空值或者是不合法的值
限制:以逗號分割,分割單元以數(shù)字組成
結(jié)果:分割之后 字符串變?yōu)?#39;3.2,3.0,2.6,1.0'和3.4
輸入輸出參數(shù):
prstring:?? ??? ?要分割的字符串
輸出參數(shù):
rval:?? ??? ??? ?從字符串中取得的數(shù)值
rcode:?? ??? ??? ?返回代碼:0:表示成功執(zhí)行;1:表示沒有取到值或者取到的不是數(shù)值
*/
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 ;
執(zhí)行:
CALL sp_test_3(); SELECT * FROM test_1; TRUNCATE test_1;
總結(jié)
以上是生活随笔為你收集整理的mysql正则提取字符串_mysql字符串查找截取与正则表达式的联合应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女性的安全期是指哪几天(女性的安全期是什
- 下一篇: 从昆明长水机场到昆明站怎么坐地铁(昆明机