mysql 中使用split

      在mysql中好像并没有提供split的函数,即使有那么该如何接收返回值呢?数组吗.

      反正我只能间接的实现,如下:

DELIMITER $$;

DROP FUNCTION IF EXISTS `func_getSplitCount`$$

CREATE FUNCTION `func_getSplitCount`(
	f_string varchar(1000),f_delimit varchar(5)
) RETURNS int(11)
BEGIN
	return 1+(length(f_string) - length(replace(f_string,f_delimit,'')));
END$$

DELIMITER ;$$

 

DELIMITER $$;

DROP FUNCTION IF EXISTS `func_getSplitString`$$

CREATE FUNCTION `func_getSplitString`(
	f_string varchar(1000),f_delimit varchar(5),f_order int
) RETURNS varchar(255)
BEGIN
  declare result varchar(255) default '';
  set result = reverse(substring_index(reverse(substring_index(f_string,f_delimit,f_order)),f_delimit,1));
  return result;
END$$

DELIMITER ;$$

 

-- 以下是利用这个split的一个片段

....
set loopCount = func_getSplitCount(orString,splitDelimit);
	
WHILE(loopCount > 0) DO
	set temp_orWhere = concat(temp_orWhere,' or cIdxMapCd = \'',func_getSplitString(orString,splitDelimit,loopCount),'\'');
	set loopCount = loopCount - 1;
END WHILE;



....

 恩就是这样,至少我没有更好的办法.
 利用length函数和replace计算出split的个数,然后利用substring_index和reverse函数取出指定位置的内容,最后利用循环,不断的去拿.

### 实现 MySQL 字符串分割函数 在 MySQL 中,可以通过创建自定义函数来实现类似于其他编程语言中的 `split` 功能。以下是几种常见的实现方式: #### 方法一:基于表生成器的方式 这种方法利用了临时表或派生表来辅助完成字符串的拆分。 ```sql DELIMITER $$ CREATE FUNCTION SPLIT_STR( x VARCHAR(255), delim VARCHAR(12), pos INT ) RETURNS VARCHAR(255) DETERMINISTIC BEGIN RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, ''); END$$ DELIMITER ; ``` 此函数接受三个参数:待分割的字符串、分隔符以及想要获取的部分的位置[^1]。 #### 方法二:通过存储过程迭代处理 这种方式适用于需要返回整个列表的情况,而不是单个部分。 ```sql DROP PROCEDURE IF EXISTS splitStringIntoTable; DELIMITER $$ CREATE PROCEDURE splitStringIntoTable(IN str TEXT, IN delimiter CHAR(1)) BEGIN DECLARE temp_str TEXT DEFAULT ''; DROP TEMPORARY TABLE IF EXISTS tmp_table; CREATE TEMPORARY TABLE tmp_table (value VARCHAR(255)); WHILE LOCATE(delimiter, str) DO SET temp_str = SUBSTRING_INDEX(str, delimiter, 1); INSERT INTO tmp_table VALUES(temp_str); SET str = REPLACE(str, CONCAT(temp_str,delimiter),''); END WHILE; -- 插入最后一个元素 IF NOT ISNULL(str) THEN INSERT INTO tmp_table VALUES(str); END IF; SELECT * FROM tmp_table; END$$ DELIMITER ; ``` 该存储过程中会将输入字符串按指定字符切分成多行记录存放在临时表中并最终查询出来显示给用户[^2]。 #### 使用示例 假设有一个逗号分隔的名字列表 `"Alice,Bob,Charlie"` ,可以调用上述任意一种方法来进行解析: 对于第一个例子可以直接得到特定位置的结果: ```sql SELECT SPLIT_STR('Alice,Bob,Charlie', ',', 2); -- 返回 "Bob" ``` 而对于第二个例子则可以获得完整的分解后的集合: ```sql CALL splitStringIntoTable('Alice,Bob,Charlie', ','); -- 结果集如下: --+------- | value | --+------- | Alice | | Bob | | Charlie| --+------- ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值