分割字串為陣列需要用到 三個mysql 的函式 :
reverse(str)
返回顛倒字元順序的字串str。
substring_index(str,delim,count)
返回從字串str的第count個出現的分隔符delim之後的子串。如果count是正數,返回最後的分隔符到左邊(從左邊數) 的所有字元。如果count是負數,返回最後的分隔符到右邊的所有字元(從右邊數)。
replace(str,from_str,to_str)
返回字串str,其字串from_str的所有出現由字串to_str代替。
通過三個函式的組合使用做到分割字串為陣列的功能。
獲得所有以「某個符號「分割的字串的個數,函式內容如下
(將sql**複製放在n**icat中執行即可)
delimiter $$
create
definer
=`root`
@`%`
function
`func_get_split_string_total`
(f_string varchar
(1000
),f_delimiter varchar(5
))returns
int(11)
begin
-- get the total number of given string.
return1+
(length(f_string)
- length(
replace
(f_string,f_delimiter,'')
))/3
;end$$
delimiter
;
這邊的除以3表示切割的字串的長度,計算根據指定字串進行切割後的個數,就是求需要切割的個數加一即可.我這邊測試切割的是』|||』,如果是逗號就將3改為1即可.
然後就可以呢看見函式:
2. 按分割取出字串
delimiter $$
create
definer
=`root`
@`%`
function
`func_get_split_string`
(f_string varchar
(1000
),f_delimiter varchar(5
),f_order int
)returns
varchar
(255
)charset utf8
begin
-- get the separated number of given string.
declare result varchar
(255
)default'';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)
),f_delimiter,1)
);return result;
end$$
delimiter
;
然後再寫乙個儲存過程進行組合使用這兩個函式,輸入需要分割的字串 ,和分隔符,輸出 按某某符號分割後的陣列,插入臨時表
delimiter $$
create
procedure
`sp_print_result`
(in f_string varchar
(1000),
in f_delimiter varchar
(100))
begin
-- get the separated string.
declare cnt int
default0;
declare i int
default0;
set cnt = func_get_split_string_total(f_string,f_delimiter)
;drop
table
ifexists tmp_print;
create
temporary
table tmp_print (num varchar
(110))
;while i < cnt
doset i = i +1;
insert
into tmp_print(num)
values
(func_get_split_string(f_string,f_delimiter,i));
endwhile
;select
*from tmp_print;
end$$
delimiter
;
臨時表我使用varchar,原作者是使用的int.可以進行修改.
可能執行的時候會報錯:the user specified as a definer (『root』@』%』) does not exist
執行 :grant all privileges on . to root@"%" identified by 「.」;
執行 :flush privileges;
然後測試我自己的:
call sp_print_result(
'www.111.com|||www.111.com|||www.111.com|||www.222.com|||www.3333.com|||www.baiddsfu3.com|||www.4444.com|||www.5555.com'
,'|||'
);
執行結果:
轉,部分修改增強:
按照指定長度切割字串
按照指定長度分割字串 param inputstring 需要切割的源字串 param length 指定的長度 return public static string getdivlines string inputstring,int length if remainder 0 string s...
以指定編碼對字串進行擷取
假設有字串 朱元璋 擷取限定的長度為7位元組 擷取編碼為utf 8 結果為 朱 擷取編碼為gb2312時 結果為 朱 字串為 hello朱元璋 擷取限定的長度為13位元組 擷取編碼為utf 8 結果為 hello朱元 這裡的問題就是gbk編碼佔位2個位元組,而utf 8佔位3個位元組,完整的示例 2...
對字串進行排序
給三個字串,對它們進行排序,之前寫過對三個數排序,定義乙個中間變數,a,b,c依次比較,如果不是順序,就用臨時變數對它們進行交換。字串也可以用這樣的方法進行排序。void sort const char a,const char b,const char c 字串不能被修改,應該用const修飾 i...