从varchar MySQL中挑出一个字符串,存储过程

时间:2016-07-22 09:43:09

标签: mysql sql split procedure cut

目前我正在寻找一种解决方案来“切断varchar的字符串”。

我有一个游标,它贯穿我从SQL语句中获取的所有行。 在每个行中都包含一个'#',这个我想剪切并插入到另一个表中。

但是我怎样才能切掉'#'和后面的字符?
我考虑过分裂,但没有找到解决方法如何在MySQL中做到这一点。

我希望你能帮助我

2 个答案:

答案 0 :(得分:1)

假设您有一个类似first #second third的字符串,您可以使用MySQL的字符串函数来提取second

SUBSTRING(SUBSTRING(col, INSTR(col, '#') + 1),
          1,
          INSTR(SUBSTRING(col, INSTR(col, '#') + 1), ' ') - 1)

这假设只有一个井号(#),并且要提取的字符串末尾的分隔符是一个空格。

答案 1 :(得分:0)

这是执行此操作的函数的示例

delimiter //
CREATE DEFINER=`root`@`localhost` FUNCTION `cut`(`instring` varchar(255))
    RETURNS varchar(255) CHARSET latin1
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
begin
declare   tempstring varchar(100);
declare   outstring  varchar(100);
declare  checkit int;
declare  firsthashpos int; 
declare  tempid int;

set tempstring = ltrim(rtrim(instring));
set checkit = 0;


if instr(tempstring,'#') then set firsthashpos = instr(tempstring,'#'); end if; 

looper: while   tempstring is not null and instr(tempstring,'#') > 0 do

        set outstring = reverse(substring(reverse(tempstring),1,instr(reverse(tempstring),'#')));
        set tempstring = replace(tempstring,reverse(substring(reverse(tempstring),1,instr(reverse(tempstring),'#'))),'');

        insert into b (address) values (outstring);

end while; 

return concat(tempstring);
end//
delimiter ;

鉴于此

select * from a;
+------+---------------------+
| id   | address             |
+------+---------------------+
|    1 | 13 #ont 12#45 st    |
|    2 | 13 #ont 12345 st    |
|    3 | 13 #ont 12#45 45678 |
|    4 | 56789 #ont 12#45 st |
+------+---------------------+

的结果
select id,address,cut(address)
from    a
where instr(address,'#') > 0;

结果b

select * from b;
+----+---------------+
| id | address       |
+----+---------------+
|  1 | #45 st        |
|  2 | #ont 12       |
|  3 | #ont 12345 st |
|  4 | #45 45678     |
|  5 | #ont 12       |
|  6 | #45 st        |
|  7 | #ont 12       |
+----+---------------+

函数返回值(outstring)包含删除#s后的位后剩余的值。希望函数中的字符串操作是不言自明的。