mysql存储过程实现split功能
2016-10-20 11:48
681 查看
存储过程实现split功能并查询,可以进索引。
首先建一张表:cross_join_id
表里面是从1到你所要的最大循环数,最多不要超过5000,。如图:
存储过程核心代码如下:
in_newstype:输入的参数,默认是逗号分隔的字符串。
当in_newstype=1,2,3,4,5时
结果:
以下是两种应用:
条件限定:
一种是:给1,2,3,则查某属性是1或2或3的记录
一种是:给1015,2012,3000,则查记录某属性以1015或2012或3000开头的记录
在这感谢一下教我方法的李前辈,原先我是用网上创建虚拟表的方法实现功能的。
首先建一张表:cross_join_id
CREATE TABLE `cross_join_id` ( `id` int(11) DEFAULT NULL, KEY `idx_id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表里面是从1到你所要的最大循环数,最多不要超过5000,。如图:
存储过程核心代码如下:
( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(n.accid,',',m.id),',',-1) AS accid FROM cross_join_id AS m CROSS JOIN ( SELECT in_newstype AS accid ) AS n WHERE m.id>=1 AND m.id<(LENGTH(n.accid)-LENGTH(REPLACE(n.accid,',',''))+2) )
in_newstype:输入的参数,默认是逗号分隔的字符串。
当in_newstype=1,2,3,4,5时
结果:
以下是两种应用:
SELECT varstdate AS stdate,vareddate AS eddate,b.accid,SUM(b.chgbonus) AS bonus FROM ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(n.accid,',',m.id),',',-1) AS accid FROM cross_join_id AS m CROSS JOIN ( SELECT in_accid AS accid ) AS n WHERE m.id>=1 AND m.id<(LENGTH(n.accid)-LENGTH(REPLACE(n.accid,',',''))+2) ) AS a INNER JOIN accountcharge AS b ON a.accid=b.accid WHERE b.chgdate>=varstarttime AND b.chgdate<varcurtime AND FIND_IN_SET(b.chgtype,in_chgtype) GROUP BY b.accid;
SELECT id,optype,content,title,newstype,idx,pagenum,createuser,modifydate,starttime,endtime,sourcetype,isoneself,modifydate FROM page_position_history WHERE id=(CASE WHEN in_id='' THEN id ELSE in_id END) AND createuser=(CASE WHEN in_user='' THEN createuser ELSE in_user END) AND sourcetype=(CASE WHEN in_sourcetype='' THEN sourcetype ELSE in_sourcetype END) AND SUBSTR(newstype,1,4) IN ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(n.accid,',',m.id),',',-1) AS accid FROM cross_join_id AS m CROSS JOIN ( SELECT in_newstype AS accid ) AS n WHERE m.id>=1 AND m.id<(LENGTH(n.accid)-LENGTH(REPLACE(n.accid,',',''))+2) ) ORDER BY modifydate DESC LIMIT varidx,pagesize ) AS m;
条件限定:
一种是:给1,2,3,则查某属性是1或2或3的记录
一种是:给1015,2012,3000,则查记录某属性以1015或2012或3000开头的记录
在这感谢一下教我方法的李前辈,原先我是用网上创建虚拟表的方法实现功能的。
相关文章推荐
- 存储过程中实现类似split功能(charindex)
- 存储过程中实现类似split功能(charindex)
- SQL实现split功能的函数 (2)
- SQL Server函数实现C# split功能
- SQL server实现split功能的函数
- [学习]实现split功能的函数
- SQL split 功能实现
- 实现split功能的函数
- SQL里实现类似SPLIT功能
- 在SQL SERVER中实现Split功能的函数,并在存储过程中使用
- 实现类似split功能(charindex)
- 转载sqlserver实现split功能 的函数
- SQL实现split功能的函数
- SQL server实现split功能的函数
- 实现split功能 的函数
- SqlServe中分割字符串实现 类似split()功能
- 在sql 里实现asp中split的功能
- SQL Serve中实现字符串分割(split)的功能函数
- SQL中实现Split的功能函数
- SQL 实现 C# Split 功能