目前我正在尋找一種解決方法來「切出一個varchar的字符串」。從varchar中挑選一個字符串MySQL,存儲過程
我有一個遊標,它貫穿我從SQL語句中獲得的所有行。 在每一行中都包含一個'#',這個我想切出並插入到另一個表中。
但是我怎樣才能把'#'和後面的字符切掉?
我想過分裂,但沒有找到解決方案如何在MySQL中做到這一點。
我希望你能幫助我
目前我正在尋找一種解決方法來「切出一個varchar的字符串」。從varchar中挑選一個字符串MySQL,存儲過程
我有一個遊標,它貫穿我從SQL語句中獲得的所有行。 在每一行中都包含一個'#',這個我想切出並插入到另一個表中。
但是我怎樣才能把'#'和後面的字符切掉?
我想過分裂,但沒有找到解決方案如何在MySQL中做到這一點。
我希望你能幫助我
假設你有一個字符串像first #second third
,你可以使用MySQL的字符串函數提取second
:
SUBSTRING(SUBSTRING(col, INSTR(col, '#') + 1),
1,
INSTR(SUBSTRING(col, INSTR(col, '#') + 1), ' ') - 1)
這是假設只有一個井號(#
),並且要提取的字符串結尾的分隔符是空格。
感謝您的回覆,但是當一行中有更多標籤時?我該如何處理? –
你甚至可以描述你將如何確定_which_ hashtag是你想要的邏輯嗎?我會說,如果它看起來太複雜,你可能會更好地將數據讀入你的應用層並在那裏提取它。 –
不,我不想要「一個」,當有更多的hashtags在這個varchar我想全部切出。在此之後,我會將它們添加到新表格中。 –
這裏是和示例功能來在B做
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;
結果
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被移除後的位後留下的內容。希望函數中的字符串操作是不言自明的。
哈哈謝謝,但我決定在php中做這個東西:) –
你可以使用字符串函數,但邏輯會有點複雜。 –