mysql街字串 MySQL字串分割

2021-10-19 21:53:57 字數 3608 閱讀 7024

在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 超出限制,插入不成功 插入不成功 ...