一个朋友遇到点问题,想在mysql里把一段用固定符号分隔的字符串,按分隔符分别列出来。就是一个典型的split应用,但是mysql却没有自带这个函数,在网上搜了一把。可以通过自建函数来解决,以下的函数来自互联网。
DELIMITER $$
CREATE FUNCTION `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
) RETURNS int(11)
BEGIN
return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
END$$
DELIMITER ;
DELIMITER $$
CREATE FUNCTION `func_get_split_string`(
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 ;
需要设置下参数:
SET GLOBAL log_bin_trust_function_creators = 1;
下面我们来测试下:
CREATE TABLE "t" (
-> "t1" varchar(100) DEFAULT NULL,
-> "t2" int(11) DEFAULT NULL
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
mysql> insert into t(t1,t2) values('a,b,c,d',1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t(t1,t2) values('a b c d',2);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t;
+---------+------+
| t1 | t2 |
+---------+------+
| a,b,c,d | 1 |
| a b c d | 2 |
+---------+------+
2 rows in set (0.00 sec)
首先用func_get_split_string_total函数得到符合匹配的数量
mysql> select func_get_split_string_total(t1,',') from t where t2=1;
+-------------------------------------+
| func_get_split_string_total(t1,',') |
+-------------------------------------+
| 4 |
+-------------------------------------+
1 row in set (0.00 sec)
然后用func_get_split_string得出你想要的字符串
mysql> select func_get_split_string(t1,',',1) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',1) |
+---------------------------------+
| a |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select func_get_split_string(t1,',',2) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',2) |
+---------------------------------+
| b |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select func_get_split_string(t1,',',3) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',3) |
+---------------------------------+
| c |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select func_get_split_string(t1,',',4) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',4) |
+---------------------------------+
| d |
+---------------------------------+
1 row in set (0.00 sec)
当然,这只是个思路,如果你想把所有字符串都列出来,可以写个过程,在里面循环一下。
希望能对这位朋友有帮助。
http://blog.csdn.net/chaoping315/article/details/5866814
- 浏览: 5042703 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
发表评论
-
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2851本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Mycat1.6之注解&多租户
2017-11-20 18:21 1240永久链接: http://gaojingsong.ite ... -
哪些SQL语句会引起全表扫描
2016-10-19 10:37 1437本文导读:大家都知道 ... -
MySQL中group_concat函数
2015-12-19 13:18 915本文通过实例介绍了MySQL中的group_conc ... -
JDBC事务控制管理
2015-12-13 00:54 12781、事务 (1)事务的概念 事务指逻辑上的一组操作, ... -
Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
2015-08-26 09:41 781使用Mybatis的时候,有些时候能输出(主要是指sql, ... -
sql 解析器
2015-08-10 09:34 1619druid sqlparser JsqlParser ... -
Querydsl
2015-08-10 09:35 2669Querydsl是一个Java开源框架用于构建类型安全的S ... -
sqlite database browser的使用
2015-07-01 15:55 1877这几天在写一个程序,需要用到SQLITE,但是对于SQLI ... -
一个小时内学习 SQLite 数据库
2015-07-01 15:55 7061. 介绍 SQLite 是一个开源的嵌入式关系数据库 ... -
PostgreSQL导出导入
2015-02-13 16:38 3592整理了一下PostgreSQL导入导出相关schema的方 ... -
Grant: Postgresql 9.0 得到增强
2014-12-17 14:01 794Postgresql9.0 在 grant ... -
SQL找出重复数据只保留一条
2014-03-17 15:06 2009用SQL语句,删除掉重复 ... -
oralce split 函数
2013-12-06 00:22 973create OR REPLACE type Split_T ... -
Oracle中函数/过程返回结果集的几种方式
2013-12-03 16:36 1011Oracle中函数/过程返回结果集的几种方式: 以函 ... -
oracle中 procedure和function 区别
2013-12-03 13:52 10401、标识符不同。函数的标识符为FUNCTION,过程为:P ... -
plsql 导出 sql脚本
2013-12-03 09:25 955create table B_AIRCONDITIONING ... -
oracle 同义词
2013-11-26 17:30 8131. 同义词时表、索引、视图等模式对象的一个别名。oracl ... -
数据库设计 之设计 表字段类型
2013-11-26 16:46 1001之前没有 数据库设计的一些经验。 这次数据库设计。由于需求 ... -
oracle 工具语句
2013-11-26 15:41 766flashback table B_RENTAL_PRICE_ ...
相关推荐
在MySQL数据库中,`SPLIT`函数并不是内置的函数,但我们可以使用其他方式来实现类似的功能,即字符串分隔。通常,我们用`SUBSTRING_INDEX()`或`REGEXP_REPLACE()`结合`FIND_IN_SET()`来分割字符串。这些函数在处理...
在SQL中,处理字符串时确实不如其他编程语言那样灵活,...以上就是在MySQL中实现类似SPLIT功能的方法,虽然不如某些编程语言直接支持数组那样方便,但通过自定义函数和巧妙的逻辑,我们仍然可以有效地处理分隔字符串。
函数实现如下: ```sql DELIMITER $$ USE `mess` $$ DROP FUNCTION IF EXISTS `func_get_splitStringTotal` $$ CREATE FUNCTION `func_get_splitStringTotal`(f_string VARCHAR(10000), f_delimiter VARCHAR(50)...
`split()`函数则用于根据指定的分隔符将字符串分割成数组。这对于处理CSV数据或者需要拆分字符串的情况非常有用。你还可以通过`limit`参数限制分割出的数组元素数量。 最后,`sql_regcase()`函数是一个不太常见的...
在本示例中,我们将深入探讨如何在MySQL中创建一个存储过程,用于将字符串按照指定的分隔符进行拆分,即实现类似JavaScript中的`split()`函数的功能。 首先,我们来看一下提供的存储过程代码: ```sql drop ...
尤其是在与MySQL数据库交互的过程中,理解并熟练应用这些函数能够显著提升开发效率和程序的灵活性。此外,正则表达式的理解和运用也是高级PHP开发者必备的技能之一。希望本文的解析能够帮助读者更深入地了解这些函数...
此外,MySQL 还支持正则表达式函数,如 `ereg`、`ereg_replace`、`eregi`、`eregi_replace`、`split` 和 `sql_regcase`,它们在处理字符串时提供了强大的匹配和替换功能,可以极大地提升数据库查询的灵活性和效率。...
最近项目中有很多需要做批量操作的需求,客户端把一组逗号分隔的ID字符串传给数据库,存储过程就需要把它们分割,然后逐个处理。 以往的处理方式有如下几种: 1、在存储过程内写循环,逐个分析字符串中的ID,然后...
一、函数功能:对字符串进行分隔数组,取指定顺序位置的子字符串,支持左右双向获取,支持...二、函数格式:fn_get_split_val(in_str varchar,in_delimiter varchar,in_order int,in_default varchar) 三、测试用例
DB2中的分页查询通常使用`ROWNUMBER()`窗口函数来实现,而MySQL则使用`LIMIT`关键字。 ##### DB2分页写法 ```sql SELECT *, ROWNUMBER() OVER (ORDER BY AREA_CODE) AS ROWNUMBER_ FROM mytable WHERE 1 = 1 AND ROW...
为提高效率,可以考虑使用更高级的全文检索技术,如倒排索引,或者数据库特定的字符串处理函数,如SQL Server的`STRING_SPLIT`或MySQL的`FIND_IN_SET`。 总的来说,`Split`函数是一个强大的工具,能帮助我们处理...
本话题主要介绍如何利用存储过程来实现这一功能,涉及的关键知识点包括MySQL的内置函数以及存储过程的创建与调用。 1. **REVERSE() 函数**: - `REVERSE(str)` 是一个MySQL字符串函数,它接收一个字符串参数`str`...
MySQL是最流行的开放源码关系型数据库管理系统,它具有多方面的优点,如能工作在众多不同平台上,SQL函数使用高度优化的类库实现,运行速度快等。然而,MySQL对中文字符集的支持较差,在设置数据库字符集为“gb2312...
* 字符串函数:Power Query M 语言的字符串函数用于处理字符串,如 concatenation、split、trim 等。 * 日期函数:Power Query M 语言的日期函数用于处理日期和时间,如 Today、Now、Date.Add 等。 数据访问函数 ...
例如,如果数据是以逗号分隔值(CSV)格式,可以使用`String.split()`方法来拆分。 4. **MySQL数据库操作** 在Java中,我们可以使用JDBC(Java Database Connectivity)API与MySQL进行交互。首先,需要在项目中引入...
1. PHP中的字符串分割函数,`split`函数使用正则表达式将字符串分割成数组,但此函数已废弃,推荐使用`preg_split`。`implode`用于将数组元素组合为一个字符串,`explode`是用指定字符分割字符串成数组,`join`与`...
在实现无限级分类的核心逻辑中,需要编写基础函数来递归或通过LIKE查询获取所有分类数据,并返回一个排序后的分类数组。这里提供一个使用递归实现的函数`ReadClass`: ```php function ReadClass($datatable, $...