mysql對指定字串進行切割插入表

2022-09-07 10:09:13 字數 3078 閱讀 3772

分割字串為陣列需要用到 三個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...