MYSQL :逗号分隔串表,分解成竖表

DROP TEMPORARY TABLE IF EXISTS Temp_Num ;  


   CREATE TEMPORARY TABLE  Temp_Num ( xh INT PRIMARY KEY ); -- 创建数字辅助表   
   SET @i = 0;   
INSERT INTO Temp_Num(xh) -- 写入数字辅助表   
   SELECT @i := @i+1   
   FROM AdDataCenter.`Ad_Targeting_Mobisage` a    
   LIMIT 0, 100 ;
SELECT  b.AdGroupID  ,  SUBSTRING( str_split  , a.xh , LOCATE(',',CONCAT( str_split  ,','), a.xh ) - a.xh ) AS splitstr  
FROM  Temp_Num a
CROSS JOIN   
	(SELECT AppCategory AS str_split  ,app.* 
	 FROM AdDataCenter.Ad_Targeting_Mobisage app 
	 WHERE app.AdTargetingID IN (1,2,3,4) ) b  
WHERE a.xh <= LENGTH( str_split  )  
	AND SUBSTRING( CONCAT(',', str_split  ), a.xh, 1) = ','
LIMIT 0 ,1000 ;  
SELECT AppCategory AS str_split  ,app.* 
	 FROM AdDataCenter.Ad_Targeting_Mobisage app 
	 WHERE app.AdTargetingID IN (1,2,3,4);

原数据

str_split                                                               AdTargetingID  
----------------------------------------------------------------------  ---------------

1,10,11,12,13,14,15,16,19,2,20,21,22,24,25,26,27,28,29,3,31,32,4,5,6,8                2
1,10,11,13,14,15,16,2,20,21,22,25,26,27,28,29,3,31,32,4,6,8                                     3
1,10,11,12,13,14,15,16,19,20,21,22,25,27,28,3,32,4,6,8                                             4

实现的效果是

AdGroupID  splitstr  
---------  ----------
        2  1         
        2  10        
        2  11        
        2  12        
        2  13        
        2  14        
        2  15        
        2  16        
        2  19        
        2  2         
        2  20        
        2  21        
        2  22        
        2  24        
        2  25        
        2  26        
        2  27        
        2  28        
        2  29        
        2  3         
        2  31        
        2  32        
        2  4         
        2  5         
        2  6         
        2  8         
        3  1         
        3  10        
        3  11        
        3  13        
        3  14        
        3  15        
        3  16        
        3  2         
        3  20        
        3  21        
        3  22        
        3  25        
        3  26        
        3  27        
        3  28        
        3  29        
        3  3         
        3  31        
        3  32        
        3  4         
        3  6         
        3  8         
        4  1         
        4  10        
        4  11        
        4  12        
        4  13        
        4  14        
        4  15        
        4  16        
        4  19        
        4  20        
        4  21        
        4  22        
        4  25        
        4  27        
        4  28        
        4  3         
        4  32        
        4  4         
        4  6         
        4  8         


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MySQL中将逗号分隔字符串拆分到临时表中,可以使用以下步骤: 1. 创建一个临时表,用于存储拆分后的值: ```sql CREATE TEMPORARY TABLE temp_table (value VARCHAR(255)); ``` 2. 使用`SUBSTRING_INDEX`函数将逗号分隔字符串拆分成多个值,并插入到临时表中: ```sql INSERT INTO temp_table SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(your_column, ',', n), ',', -1) AS value FROM your_table CROSS JOIN ( SELECT 1 + n + thousands.n + millions.n * 1000 AS n FROM ( SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS thousands CROSS JOIN ( SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) AS millions ) AS numbers WHERE n <= (LENGTH(your_column) - LENGTH(REPLACE(your_column, ',', ''))) + 1; ``` 请将上述代码中的`your_table`替换为包含逗号分隔字符串的表名,`your_column`替换为包含逗号分隔字符串的列名。 3. 现在,临时表`temp_table`中的每一行都包含一个拆分后的值。可以使用以下查询来检索这些值: ```sql SELECT value FROM temp_table; ``` 4. 最后,如果不再需要这个临时表,可以使用以下语句删除它: ```sql DROP TEMPORARY TABLE temp_table; ``` 通过这些步骤,你可以将逗号分隔字符串拆分到临时表中,并在需要时检索和处理这些值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值