MySQL Split 函数

原创
2019/08/18 21:35
阅读数 2.2K

想在mysql里把一段用固定符号分隔的字符串,按分隔符分别列出来。就是一个典型的split应用,但是mysql却没有自带这个函数,在网上搜了一把。可以通过自建函数来解决,以下的函数来自互联网。

 
  1. DELIMITER $$

  2. CREATE FUNCTION `func_get_split_string_total`(

  3. f_string varchar(1000),f_delimiter varchar(5)

  4. ) RETURNS int(11)

  5. BEGIN

  6. return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));

  7. END$$

  8. DELIMITER ;

  9.  

  10.  

  11. DELIMITER $$

  12. CREATE FUNCTION `func_get_split_string`(

  13. f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8

  14. BEGIN

  15. declare result varchar(255) default '';

  16. set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));

  17. return result;

  18. END$$

  19. DELIMITER ;

需要设置下参数:

SET GLOBAL log_bin_trust_function_creators = 1;

下面我们来测试下:

 
  1. CREATE TABLE "t" (

  2. -> "t1" varchar(100) DEFAULT NULL,

  3. -> "t2" int(11) DEFAULT NULL

  4. -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

  5.  

  6. mysql> insert into t(t1,t2) values('a,b,c,d',1);

  7. Query OK, 1 row affected (0.00 sec)

  8.  

  9. mysql> insert into t(t1,t2) values('a b c d',2);

  10. Query OK, 1 row affected (0.00 sec)

  11.  

  12. mysql> select * from t;

  13. +---------+------+

  14. | t1 | t2 |

  15. +---------+------+

  16. | a,b,c,d | 1 |

  17. | a b c d | 2 |

  18. +---------+------+

  19. 2 rows in set (0.00 sec)

首先用func_get_split_string_total函数得到符合匹配的数量

 
  1. mysql> select func_get_split_string_total(t1,',') from t where t2=1;

  2. +-------------------------------------+

  3. | func_get_split_string_total(t1,',') |

  4. +-------------------------------------+

  5. | 4 |

  6. +-------------------------------------+

  7. 1 row in set (0.00 sec)

然后用func_get_split_string得出你想要的字符串

 
  1. mysql> select func_get_split_string(t1,',',1) from t where t2=1;

  2. +---------------------------------+

  3. | func_get_split_string(t1,',',1) |

  4. +---------------------------------+

  5. | a |

  6. +---------------------------------+

  7. 1 row in set (0.00 sec)

  8.  

  9. mysql> select func_get_split_string(t1,',',2) from t where t2=1;

  10. +---------------------------------+

  11. | func_get_split_string(t1,',',2) |

  12. +---------------------------------+

  13. | b |

  14. +---------------------------------+

  15. 1 row in set (0.00 sec)

  16.  

  17. mysql> select func_get_split_string(t1,',',3) from t where t2=1;

  18. +---------------------------------+

  19. | func_get_split_string(t1,',',3) |

  20. +---------------------------------+

  21. | c |

  22. +---------------------------------+

  23. 1 row in set (0.00 sec)

  24.  

  25. mysql> select func_get_split_string(t1,',',4) from t where t2=1;

  26. +---------------------------------+

  27. | func_get_split_string(t1,',',4) |

  28. +---------------------------------+

  29. | d |

  30. +---------------------------------+

  31. 1 row in set (0.00 sec)

当然,这只是个思路,如果你想把所有字符串都列出来,可以写个过程,在里面循环一下。

希望能对这位朋友有帮助。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部