mysql拆分字段返回空,MySQL拆分逗号分隔的字符串到临时表中

Can you parse a comma separated string into a temp table in MySQL using RegEx?

'1|2|5|6' into temp table with 4 rows.

解决方案

This is pretty much the same question as Can Mysql Split a column?

MySQL doesn't have a split string function so you have to do work arounds. You can do anything with the data once you split it using one of the methods listed on the answer page above.

You can loop over that custom function and break when it returns empty, you'll have to play and learn some syntax (or at least I would) but the syntax for a FOR loop in mysql is here:

http://www.roseindia.net/sql/mysql-example/for.shtml

You can iterate over it, incrementing the position in the function below:

CREATE FUNCTION SPLIT_STR(

x VARCHAR(255),

delim VARCHAR(12),

pos INT

)

RETURNS VARCHAR(255)

RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),

LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),

delim, '');

Which should return '' if no match is found, so break the loop if no match is found. This will allow you to with only mysql parse over the split string and run the insert queries into a temp table. But man why not just use a scripting language like php for that kind of work? :(

Code for loop syntax:

DELIMITER $$

CREATE PROCEDURE ABC(fullstr)

BEGIN

DECLARE a INT Default 0 ;

DECLARE str VARCHAR(255);

simple_loop: LOOP

SET a=a+1;

SET str=SPLIT_STR(fullstr,"|",a);

IF str='' THEN

LEAVE simple_loop;

END IF;

#Do Inserts into temp table here with str going into the row

insert into my_temp_table values (str);

END LOOP simple_loop;

END $$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值