`

mysql split 函数(用逗号分隔)的实现

 
阅读更多

1:定义存储过程,用于分隔字符串

DELIMITER $$
USE `mess`$$
DROP PROCEDURE IF EXISTS `splitString`$$
CREATE DEFINER=`root`@`%` PROCEDURE `splitString`(IN f_string VARCHAR(1000),IN f_delimiter VARCHAR(5))
BEGIN    
    DECLARE cnt INT DEFAULT 0;    
    DECLARE i INT DEFAULT 0;    
    SET cnt = func_get_splitStringTotal(f_string,f_delimiter);    
    DROP TABLE IF EXISTS `tmp_split`;    
    CREATE TEMPORARY TABLE `tmp_split` (`val_` VARCHAR(128) NOT NULL) DEFAULT CHARSET=utf8;    
    WHILE i < cnt    
    DO    
        SET i = i + 1;    
        INSERT INTO tmp_split(`val_`) VALUES (func_splitString(f_string,f_delimiter,i));    
    END WHILE;    
END$$
DELIMITER ;

  

 2:实现func_get_splitStringTotal函数:该函数用于计算分隔之后的长度,这里需要了解的函数:

 

REPLACE(str,from_str,to_str)

Returns the string str with all occurrences of the string from_str replaced by the string to_str. REPLACE() performs a case-sensitive match when searching for from_str.
例如:
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'

 

 具体实现:

DELIMITER $$

USE `mess`$$

DROP FUNCTION IF EXISTS `func_get_splitStringTotal`$$

CREATE DEFINER=`root`@`%` FUNCTION `func_get_splitStringTotal`(    
f_string VARCHAR(10000),f_delimiter VARCHAR(50)    
) RETURNS INT(11)
BEGIN    
  RETURN 1+(LENGTH(f_string) - LENGTH(REPLACE(f_string,f_delimiter,'')));    
END$$

DELIMITER ;

 

 3:实现func_splitString函数:用于获取分隔之后每次循环的值,这里需要了解的函数:

(1)REVERSE(str)

Returns the string str with the order of the characters reversed.
例如:mysql> SELECT REVERSE('abc');
        -> 'cba'

(2)
SUBSTRING_INDEX(str,delim,count)


Returns the substring from string str before count occurrences of the delimiter delim. If count is positive, everything to the left of the final delimiter (counting from the left) is returned. If count is negative, everything to the right of the final delimiter (counting from the right) is returned. SUBSTRING_INDEX() performs a case-sensitive match when searching for delim.

例如:
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
        -> 'mysql.com'

 具体实现:

DELIMITER $$

USE `mess`$$

DROP FUNCTION IF EXISTS `func_splitString`$$

CREATE DEFINER=`root`@`%` FUNCTION `func_splitString`( f_string VARCHAR(1000),f_delimiter VARCHAR(5),f_order INT) RETURNS VARCHAR(255) CHARSET utf8
BEGIN    
    DECLARE result VARCHAR(255) DEFAULT '';    
    SET result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(f_string,f_delimiter,f_order)),f_delimiter,1));    
    RETURN result;    
END$$

DELIMITER ;

 

 

 使用:

(1)调用存储过程:

CALL splitString('1,3,5,7,9',',');

(2):查看临时表

SELECT val_ FROM tmp_split AS t1;

 

结果:

 

 

 

 

  • 大小: 3.4 KB
分享到:
评论

相关推荐

    mysql split函数用逗号分隔的实现

    这里我们将详细讲解如何在MySQL中实现一个用逗号分隔的`split`函数。 首先,我们创建一个存储过程`splitString`,这个过程接受两个参数:要分割的字符串`f_string`和作为分隔符的字符`f_delimiter`。存储过程的定义...

    MySQL里实现类似SPLIT的分割字符串的函数

    下边的函数,实现了象数组一样去处理字符串。 一,用临时表作为数组 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@...

    mysql函数split功能实现

    在MySQL数据库中,`SPLIT`函数并不是内置的函数,但我们可以使用其他方式来实现类似的功能,即字符串分隔。通常,我们用`SUBSTRING_INDEX()`或`REGEXP_REPLACE()`结合`FIND_IN_SET()`来分割字符串。这些函数在处理...

    Mysql通过存储过程分割字符串为数组

    本话题主要介绍如何利用存储过程来实现这一功能,涉及的关键知识点包括MySQL的内置函数以及存储过程的创建与调用。 1. **REVERSE() 函数**: - `REVERSE(str)` 是一个MySQL字符串函数,它接收一个字符串参数`str`...

    JAVA串口助手接收数据并解析数据存入MySQL数据库中

    例如,如果数据是以逗号分隔值(CSV)格式,可以使用`String.split()`方法来拆分。 4. **MySQL数据库操作** 在Java中,我们可以使用JDBC(Java Database Connectivity)API与MySQL进行交互。首先,需要在项目中引入...

    给Oracle添加split和splitstr函数的方法

    最近项目中有很多需要做批量操作的需求,客户端把一组逗号分隔的ID字符串传给数据库,存储过程就需要把它们分割,然后逐个处理。 以往的处理方式有如下几种: 1、在存储过程内写循环,逐个分析字符串中的ID,然后...

    Linux中将txt导入到mysql的方法教程

    在本例中,`insert()`函数使用`split()`方法拆分每一行数据,然后将拆分后的数据作为SQL插入语句的参数。 4. **异常处理**: 示例代码中没有涵盖错误处理部分,例如,如果TXT文件格式不正确,或者MySQL数据库连接...

    PHP CookBook 3rd Edition

    11. 生成以逗号分隔的字符串:对于数组元素,可以使用`implode()`函数将数组元素连接成一个以逗号分隔的字符串。 本书以实际问题为导向,每个主题下都有具体的代码示例和说明,旨在帮助开发者更好地理解和掌握PHP中...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    OraLoad类的int ProcLoad(Connection in_conn, String args[])函数就可以实现类似功能了。例如 new OraLoad.ProcLoad( null, "-u test -p testpwd -i 127.0.0.1 -s ora10 -f test.txt -t tmp_test -c , -e gbk"); ...

    一个字符串分隔多个参数存储过程调试

    这就需要用到字符串处理函数,如SQL Server中的`STRING_SPLIT`,MySQL中的`SUBSTRING_INDEX`或`FIND_IN_SET`,或者Oracle中的`INSTR`和`SUBSTR`等。 在存储过程的调试方面,不同数据库系统提供了不同的工具和方法。...

    sql带分隔符的截取字符串示例

    这个字符串由三个整数组成,用逗号分隔。 1. `LEN(@str)`函数返回字符串的长度,即10,不包括分隔符。 2. `CHARINDEX(',', @str, 1)`查找第一个逗号在字符串中的位置,返回值为3,表示从第一个字符开始计数,逗号在...

    实用SQL解决开发难题

    要从中提取单个元素,可以使用SQL的内置函数`SUBSTRING_INDEX()`(在MySQL中)或`STRING_SPLIT()`(在SQL Server 2016及以上版本中)。`SUBSTRING_INDEX(str, delim, count)`会返回从左边开始,到分隔符出现`count`...

    百家精华面试题.doc

    例如,用逗号分隔字符串: ```java String str = "abc, qwe, rty"; String[] strArr = str.split(","); ``` 这些知识点涵盖了搜索引擎原理、Web开发基础知识、Java编程、SQL查询技巧和字符串处理,是IT面试中常见的...

    ASP批量删除源码,JS实现表格动态排序

    Dim ids : ids = Request.Form("selected_ids") '假设ids是一个逗号分隔的字符串 '处理每个ID进行删除 For Each id In Split(ids, ",") cmd.CommandText = "DELETE FROM Users WHERE ID=" & id cmd.Execute Next ...

    Delphi文本和数据库表格记录的转换..rar

    2. **CSV处理**:在处理CSV(逗号分隔值)文件时,Delphi的TStringGrid或TDataset组件如TDBGrid和TClientDataSet可以用来显示和编辑数据。TDBGrid可以直接绑定到CSV文件,而TClientDataSet则可以加载CSV数据,并提供...

    数据处理存储教程1.docx

    这里,数据被分隔成多个子串,我们可以使用字符串的split()函数按分隔符(如";")来拆分。对于每个子串,我们还需要找到双引号之间的内容,并进一步按逗号分割。例如: ```python str_data = response.text data_...

    js传参数到后台读取数据再传到前台的例子

    - 当请求完成且成功时,通过`responseText`属性获取服务器返回的字符串,然后使用JavaScript的`split()`方法根据分隔符切割字符串,以便进一步处理每个数据库值。 ```javascript var xhr = new XMLHttpRequest(); ...

    asp下实现批量插入数据的方法

    在这个例子中,`arrName`和`arrPassword`分别存储了用户输入的姓名和密码,它们是通过逗号分隔的字符串。在循环中,`Trim`函数用于去除数组元素两端的空格,然后与动态构建的SQL插入语句拼接,最后调用`Execute`方法...

Global site tag (gtag.js) - Google Analytics