在mysql中沒有字串分割函式功能,但可以通過巧妙地使用不同的字串函式來實現。假設有如下的表:
mysql
create table `address` (
`id` integer auto_increment primary key,
`fullname` varchar(255),
`company` varchar(255),
`street` varchar(255),
`city` varchar(255),
`state` varchar(255),
`zip` varchar(20),
`country` varchar(255)
createtable`address`(
`id`integerauto_incrementprimary key,
`fullname`varchar(255),
`company`varchar(255),
`street`varchar(255),
`city`varchar(255),
`state`varchar(255),
`zip`varchar(20),
`country`varchar(255)
和資料:
要分割的字串
假設我們要查詢此表並將街道資訊拆分為多列,那麼可以使用mysql中的substring_index函式:
mysql
select substring_index(street, '\n', 1) as street1, substring_index(street, '\n', 2) as street2, substring_index(street, '\n', 3) as street3 from address;
selectsubstring_index(street,'\n',1)asstreet1,substring_index(street,'\n',2)asstreet2,substring_index(street,'\n',3)asstreet3fromaddress;
然而,這種結果是有問題的:
mysql中錯誤的字串分割
顯然,street2和street3的分割結果是錯誤的。如果我們仔細閱讀mysql文件,那麼會注意到substring_index返回的是分隔符左側的所有內容。 如果我們想要獲取分隔符第一次和第二次出現之間的字串,那麼可以通過將street2和street3包裝在另乙個substring_index中來進行:
mysql
select
substring_index(street, '\n', 1) as street1,
substring_index(substring_index(street, '\n', 2), '\n', -1) as street2,
substring_index(substring_index(street, '\n', 3), '\n', -1) as street3
from address;
select
substring_index(street,'\n',1)asstreet1,
substring_index(substring_index(street,'\n',2),'\n',-1)asstreet2,
substring_index(substring_index(street,'\n',3),'\n',-1)asstreet3
fromaddress;
這樣就基本上差不多似乎正確的了。但是,street3返回的值與street2仍然是不對的:
mysql中錯誤的字串分割2
這是因為這一條個街道資訊只有兩行,如果要正確處理那麼就需要使用if語句來控制substring_index:
mysql
select
@num_street_lines := 1 + length(street) - length(replace(street, '\n', '')) as num_street_lines,
substring_index(street, '\n', 1) as street1,
if(@num_street_lines > 1, substring_index(substring_index(street, '\n', 2), '\n', -1), '') as street2,
if(@num_street_lines > 2, substring_index(substring_index(street, '\n', 3), '\n', -1), '') as street3
from address;
select
@num_street_lines:=1+length(street)-length(replace(street,'\n',''))asnum_street_lines,
substring_index(street,'\n',1)asstreet1,
if(@num_street_lines>1,substring_index(substring_index(street,'\n',2),'\n',-1),'')asstreet2,
if(@num_street_lines>2,substring_index(substring_index(street,'\n',3),'\n',-1),'')asstreet3
fromaddress;
雖然這個查詢有點複雜了,但是對於那些必須在sql中執行所有操作而無法使用**來處理查詢的情況還是非常有用的:
正確的分割結果
假設我們想分割如下的字串:
要使用|分割的示例資料
那麼可以使用:
按|分割後的結果
mysql語句怎麼拼接字串 mysql字串拼接
資料準備 mysql字串拼接函式介紹 concat string1,string2,說明 string1,string2代表字串,concat函式在連線字串的時候,只要其中乙個是null,那麼將返回null select concat name account from user 結果 concat...
mysql字串亂碼 解決Mysql字串亂碼
1 字符集和字元序2 3 字符集 character set 定義了字元以及字元編碼。4 5 字元序 collation 定義了字元的比較規則。6 7 mysql支援多種字符集 與 字元序。8 9 乙個字符集對應至少一種字元序 一般是1對多 10 11 兩個不同的字符集不能有相同的字元序。12 13...
mysql 可變字串 MySQL 字串型別
字串型 set enum blob text varchar char。1.char 字元 格式 char m 固定長度 m 表示嚴格限定的長度。char 5 varchar 5 5位元組1位元組 需要乙個位元組,儲存字串的總長度 abc abcde abcdef 超出限制,插入不成功 插入不成功 ...