MySQL數(shù)據(jù)庫(kù)換了一種方式存儲(chǔ)數(shù)組 - 字符串?dāng)?shù)組。E.g. { "apple", "banana", "pear" } 將被存儲(chǔ)為 "apple,banana,pear" 這樣的字符串。因此,在某些情況下,您的應(yīng)用程序需要將MySQL字符串再次轉(zhuǎn)換為數(shù)組。那么,在MySQL中如何將以逗號(hào)分隔的字符串轉(zhuǎn)換為數(shù)組呢?下面介紹幾種方法:
使用SUBSTRING_INDEX函數(shù)和循環(huán)語(yǔ)句
該方法最簡(jiǎn)單最直接,使用MySQL的SUBSTRING_INDEX函數(shù)和WHILE語(yǔ)句將逗號(hào)分隔的字符串拆分為數(shù)組:
```sql declare xStr varchar(200) default 'apple,banana,pear'; declare i int default 1; while i<=length(xStr)-length(replace(xStr,',',''))+1 do insert into tmparray (value) values (substring_index(substring_index(xStr,',',i),',',-1)); set i=i+1; end while; ```首先,聲明一個(gè)字符串(xStr)并初始化為“apple,banana,pear”(此示例僅用于而言)。然后,計(jì)算箭頭()中的表達(dá)式。它將字符串中的逗號(hào)計(jì)數(shù)并添加1(以便將其與WHILE循環(huán)中的第一個(gè)逗號(hào)分隔字符串進(jìn)行比較)。
使用WHILE循環(huán)來(lái)逐個(gè)拆分以逗號(hào)分隔的字符串,并將每個(gè)拆分的值存儲(chǔ)到臨時(shí)表中,該表應(yīng)根據(jù)數(shù)據(jù)實(shí)際需求進(jìn)行修改。
使用正則表達(dá)式和MySQL內(nèi)置函數(shù)
mysql也支持正則表達(dá)式。所以另一種將逗號(hào)分隔的字符串轉(zhuǎn)換為數(shù)組的方法是使用正則表達(dá)式。然后使用MySQL內(nèi)置函數(shù)將正則表達(dá)式匹配提取的逗號(hào)分隔值添加到數(shù)組中。下面就是一個(gè)簡(jiǎn)單的示例。
```sql set @array = 'apple,banana,pear'; SELECT substring_index(substring_index(@array,',',n.digit+1),',',-1) name FROM ( select 0 digit union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10 union select 11 ) n where char_length(@array)-char_length(replace(@array,',',''))>=n.digit ```這種方法基于MySQL內(nèi)置函數(shù)和正則表達(dá)式。首先設(shè)置字符串,然后使用正則表達(dá)式的子字符串功能將字符串拆分為逗號(hào)分隔的值。接下來(lái),使用MySQL內(nèi)置函數(shù)將提取的值添加到數(shù)組中。
總結(jié)
可以通過(guò)使用循環(huán)和MySQL的SUBSTRING_INDEX,WHILE表示字符串拆分為數(shù)組。同時(shí),也可以利用正則表達(dá)式和MySQL的內(nèi)置函數(shù)來(lái)提取逗號(hào)分隔的字符串,將匹配結(jié)果作為數(shù)組值添加到數(shù)組中。最后,根據(jù)數(shù)據(jù)實(shí)際需求,應(yīng)保留各種技術(shù)并進(jìn)行適當(dāng)?shù)男薷摹?/p>