mysql字符串函數(shù)詳細(xì)匯總
前言
字符串函數(shù)主要用來(lái)處理數(shù)據(jù)庫(kù)中的字符串?dāng)?shù)據(jù)。??mysql?
?中的字符串函數(shù)有計(jì)算字符串長(zhǎng)度函數(shù)、字符串合并函數(shù)、字符串替換函數(shù)、字符串比較函數(shù)、查找指定字符串位置函數(shù)等。
計(jì)算字符串字符數(shù)的函數(shù)
??CHAR_LENGTH(str)?
??函數(shù)計(jì)算字符串??str?
?所包含的字符個(gè)數(shù)。一個(gè)多字節(jié)字符算作一個(gè)單字符。
mysql> select char_length('date'), char_length('yunweijia'), char_length('運(yùn)維家'); +---------------------+--------------------------+--------------------------+ | char_length('date') | char_length('yunweijia') | char_length('運(yùn)維家') | +---------------------+--------------------------+--------------------------+ | 4 | 9 | 3 | +---------------------+--------------------------+--------------------------+ 1 row in set (0.00 sec) mysql>
計(jì)算字符串長(zhǎng)度的函數(shù)
??LENGTH(str)?
??返回值為字符串的字節(jié)長(zhǎng)度,使用??utf8?
?編碼字符集時(shí),一個(gè)漢字是三字節(jié),一個(gè)數(shù)字或者字母算1字節(jié);
mysql> select length('date'), length('yunweijia'), length('運(yùn)維家'); +----------------+---------------------+---------------------+ | length('date') | length('yunweijia') | length('運(yùn)維家') | +----------------+---------------------+---------------------+ | 4 | 9 | 9 | +----------------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql>
合并字符串函數(shù)CONCAT(s1,s2,...)、CONCAT_WS(x,s1,s2,...)
??concat(s1,s2,...)?
?返回結(jié)果為連接參數(shù)產(chǎn)生的字符串,或許有一個(gè)或多個(gè)參數(shù)。
如果有一個(gè)參數(shù)為??null?
??,則返回值為??null?
?。
如果所有參數(shù)均為非二進(jìn)制字符串,則結(jié)果為非二進(jìn)制字符串。
如果自變量中含有任一二進(jìn)制字符串,則結(jié)果為一個(gè)二進(jìn)制字符串。
mysql> select concat('mysql 8.0', 'yunweijia'), concat('heihei', null, '666'); +----------------------------------+-------------------------------+ | concat('mysql 8.0', 'yunweijia') | concat('heihei', null, '666') | +----------------------------------+-------------------------------+ | mysql 8.0yunweijia | NULL | +----------------------------------+-------------------------------+ 1 row in set (0.00 sec) mysql>
??concat_ws(x,s1,s2,...)?
??中,??x?
?是分隔符,分隔符的位置放在要連接的兩個(gè)字符串之間。分隔符可以是一個(gè)字符串,也可以是其他參數(shù)。
如果分隔符是??null?
??,則結(jié)果為??null?
?。該函數(shù)會(huì)忽略任何分隔符后面的??null?
?值。
mysql> select concat_ws('-', 'mysql', '8.0', 'ywj'), concat_ws('@', 'one', null, 'two'); +---------------------------------------+------------------------------------+ | concat_ws('-', 'mysql', '8.0', 'ywj') | concat_ws('@', 'one', null, 'two') | +---------------------------------------+------------------------------------+ | mysql-8.0-ywj | one@two | +---------------------------------------+------------------------------------+ 1 row in set (0.00 sec) mysql>
替換字符串的函數(shù)INSERT(s1,x,len,s2)
??insert(s1,x,len,s2)?
??返回字符串??s1?
??,其子字符串起始于??x?
??位置和被字符串??s2?
??取代的??len?
??字符。如果??x?
??超過(guò)字符串長(zhǎng)度,則返回值為原始字符串。假如??len?
??的長(zhǎng)度大于其他字符串的長(zhǎng)度,則從位置??x?
??開(kāi)始替換。若任何一個(gè)參數(shù)為??null?
??,則返回值為??null?
?。
mysql> select insert('yunweijia', 2, 3, 'aaaaaaaa') as coll, insert('yunweijia', -1, 3, 'bbbbbbbb') as coll2, insert('yunweijia', 2, 99, 'ccccccccc') as coll3; +----------------+-----------+------------+ | coll | coll2 | coll3 | +----------------+-----------+------------+ | yaaaaaaaaeijia | yunweijia | yccccccccc | +----------------+-----------+------------+ 1 row in set (0.00 sec) mysql>
第一個(gè)函數(shù)??insert('yunweijia', 2, 3, 'aaaaaaaa')?
??將??yunweijia?
??第二個(gè)字符開(kāi)始長(zhǎng)度為3的字符串,替換成??aaaaaaaa?
?;
第二個(gè)函數(shù)??insert('yunweijia', -1, 3, 'bbbbbbbb')?
?中由于-1超出了字符串長(zhǎng)度,直接返回了原字符串;
第三個(gè)函數(shù)??insert('yunweijia', 2, 99, 'ccccccccc')?
??中由于替換長(zhǎng)度99,超出了字符串原本長(zhǎng)度,所以從第二個(gè)字符開(kāi)始,截取后面所有的字符,并替換為指定字符??ccccccccc?
?。
字母大小寫(xiě)轉(zhuǎn)換函數(shù)
大寫(xiě)轉(zhuǎn)小寫(xiě)
??lower(str)?
??或者??lcase(str)?
??可以將字符串??str?
?中的字母字符全部轉(zhuǎn)換成小寫(xiě)字母。
mysql> select lower('YUNweiJIA'), lcase('YUNweiJIA'); +--------------------+--------------------+ | lower('YUNweiJIA') | lcase('YUNweiJIA') | +--------------------+--------------------+ | yunweijia | yunweijia | +--------------------+--------------------+ 1 row in set (0.00 sec) mysql>
小寫(xiě)轉(zhuǎn)大寫(xiě)
??upper(str)?
??或者??ucase(str)?
??可以將字符串??str?
?中的字母字符全部轉(zhuǎn)換成大寫(xiě)字母。
mysql> select upper('yunWEIjia'), ucase('yunWEIjia'); +--------------------+--------------------+ | upper('yunWEIjia') | ucase('yunWEIjia') | +--------------------+--------------------+ | YUNWEIJIA | YUNWEIJIA | +--------------------+--------------------+ 1 row in set (0.00 sec) mysql>
獲取指定長(zhǎng)度的字符串的函數(shù)LEFT(s,n)和RIGHT(s,n)
??left(s,n)?
??返回字符串??s?
??開(kāi)始的最左邊的??n?
?個(gè)字符。
mysql> select left('yunweijia', 5); +----------------------+ | left('yunweijia', 5) | +----------------------+ | yunwe | +----------------------+ 1 row in set (0.00 sec) mysql>
??right(s,n)?
??返回字符串??s?
??開(kāi)始的最右邊的??n?
?個(gè)字符。
mysql> select right('yunweijia', 5); +-----------------------+ | right('yunweijia', 5) | +-----------------------+ | eijia | +-----------------------+ 1 row in set (0.00 sec) mysql>
填充字符串的函數(shù)LPAD(s1,len,s2)和RPAD(s1,len,s2)
??lpad(s1,len,s2)?
??返回字符串??s1?
??,其左邊由字符串??s2?
??填補(bǔ)到??len?
?字符長(zhǎng)度。假如??s1?
?的長(zhǎng)度大于??len?
?,則返回值被縮短至??len?
?字符。
mysql> select lpad('yunweijia', 4, '@#'), lpad('yunweijia', 20, '@#'); +----------------------------+-----------------------------+ | lpad('yunweijia', 4, '@#') | lpad('yunweijia', 20, '@#') | +----------------------------+-----------------------------+ | yunw | @#@#@#@#@#@yunweijia | +----------------------------+-----------------------------+ 1 row in set (0.00 sec) mysql>
由于字符串??yunweijia?
?長(zhǎng)度大于4,所以不僅不需要填充,反而需要截取至從左開(kāi)始4位字符的字符串。
??RPAD(s1,len,s2)?
??返回字符串??s1?
??,其右邊被字符串??s2?
??填補(bǔ)至??len?
??字符長(zhǎng)度。假如字符串??s1?
??的長(zhǎng)度大于??len?
??,則返回值被縮短到??len?
?字符長(zhǎng)度。
mysql> select rpad('yunweijia', 4, '@#'), rpad('yunweijia', 20, '@#'); +----------------------------+-----------------------------+ | rpad('yunweijia', 4, '@#') | rpad('yunweijia', 20, '@#') | +----------------------------+-----------------------------+ | yunw | yunweijia@#@#@#@#@#@ | +----------------------------+-----------------------------+ 1 row in set (0.00 sec) mysql>
由于字符串??yunweijia?
?長(zhǎng)度大于4,所以不僅不需要填充,反而需要截取至從左開(kāi)始4位字符的字符串。
刪除空格的函數(shù)LTRIM(s)、RTRIM(s)和TRIM(s)
??ltrim(s)?
??返回字符串??s?
?,字符串左側(cè)空格字符被刪除;
mysql> select '( yunweijia )', concat('(',ltrim(' yunweijia '),')'); +-----------------+----------------------------------------+ | ( yunweijia ) | concat('(',ltrim(' yunweijia '),')') | +-----------------+----------------------------------------+ | ( yunweijia ) | (yunweijia ) | +-----------------+----------------------------------------+ 1 row in set (0.00 sec) mysql>
??rtrim(s)?
??返回字符串??s?
?,字符串右側(cè)空格字符被刪除;
mysql> select '( yunweijia )', concat( '(', rtrim(' yunweijia '), ')' ); +-----------------+--------------------------------------------+ | ( yunweijia ) | concat( '(', rtrim(' yunweijia '), ')' ) | +-----------------+--------------------------------------------+ | ( yunweijia ) | ( yunweijia) | +-----------------+--------------------------------------------+ 1 row in set (0.00 sec) mysql>
??trim(s)?
??刪除字符串??s?
?兩側(cè)的空格;
mysql> select '( yunweijia )', concat( '(', trim(' yunweijia '), ')' ); +-----------------+-------------------------------------------+ | ( yunweijia ) | concat( '(', trim(' yunweijia '), ')' ) | +-----------------+-------------------------------------------+ | ( yunweijia ) | (yunweijia) | +-----------------+-------------------------------------------+ 1 row in set (0.00 sec) mysql>
刪除指定字符串的函數(shù)TRIM(s1 FROM s)
??trim(s1 from s)?
??刪除字符串??s?
??中兩端所有的子字符串??s1?
??。??s1?
?為可選項(xiàng),在未指定情況下,刪除空格。
mysql> select trim('@#' from '@#@#yunwei@#jia@#@#'); +---------------------------------------+ | trim('@#' from '@#@#yunwei@#jia@#@#') | +---------------------------------------+ | yunwei@#jia | +---------------------------------------+ 1 row in set (0.00 sec) mysql>
可以看到,只刪除指定字符串兩邊的內(nèi)容,中間的內(nèi)容并不會(huì)進(jìn)行刪除。
重復(fù)生成字符串的函數(shù)REPEAT(s.n)
??repeat(s,n)?
??返回一個(gè)由重復(fù)字符串??s?
??組成的字符串,字符串??s?
??的數(shù)量等于??n?
?;
如果??n<=0?
?,則返回一個(gè)空字符串;
如果??s?
??或者??n?
??為??null?
??,則返回??null?
?。
mysql> select repeat('x', 10), repeat('x', 0), repeat('x', null); +-----------------+----------------+-------------------+ | repeat('x', 10) | repeat('x', 0) | repeat('x', null) | +-----------------+----------------+-------------------+ | xxxxxxxxxx | | NULL | +-----------------+----------------+-------------------+ 1 row in set (0.00 sec) mysql>
空格函數(shù)SPACE(n)
??space(n)?
??返回一個(gè)由??n?
?個(gè)空格組成的字符串。
mysql> select concat('(', space(10), ')'); +-----------------------------+ | concat('(', space(10), ')') | +-----------------------------+ | ( ) | +-----------------------------+ 1 row in set (0.00 sec) mysql>
替換函數(shù)REPLACE(s,s1,s2)
??replace(s,s1,s2)?
??使用字符串??s2?
??替代字符串??s?
??中所有的字符串??s1?
?;
mysql> select replace('yunweijia', 'i', '@#'); +---------------------------------+ | replace('yunweijia', 'i', '@#') | +---------------------------------+ | yunwe@#j@#a | +---------------------------------+ 1 row in set (0.00 sec) mysql>
比較字符串大小的函數(shù)strcmp(s1,s2)
??strcmp(s1,s2)?
?:若所有的字符串均相同,則返回0;
若根據(jù)當(dāng)前分類(lèi)次序,第一個(gè)參數(shù)小于第二個(gè),則返回-1;
其他情況返回1。
mysql> select strcmp('txt', 'txt'), strcmp('txt', 'txt2'), strcmp('txt2', 'txt'); +----------------------+-----------------------+-----------------------+ | strcmp('txt', 'txt') | strcmp('txt', 'txt2') | strcmp('txt2', 'txt') | +----------------------+-----------------------+-----------------------+ | 0 | -1 | 1 | +----------------------+-----------------------+-----------------------+ 1 row in set (0.00 sec) mysql>
獲取子串的函數(shù)SUBSTRING(s,b,len)和MID(s,n,len)
??substring(s,n,len)?
??帶有??len?
??參數(shù)的格式,從字符串??s?
??返回一個(gè)長(zhǎng)度與??len?
??字符相同的子字符串,起始于位置??n?
?。
也可能對(duì)??n?
??使用一個(gè)負(fù)值。假如這樣,則子字符串的位置起始于字符串結(jié)尾的??n?
??字符,即倒數(shù)第??n?
?個(gè)字符,而不是字符串的開(kāi)頭位置。
mysql> select substring('yunweijia', 5, 2) as coll, substring('yunweijia', -3) as coll1, substring('yunweijia', 3) as coss2; +------+-------+---------+ | coll | coll1 | coss2 | +------+-------+---------+ | ei | jia | nweijia | +------+-------+---------+ 1 row in set (0.00 sec) mysql>
匹配子串開(kāi)始位置的函數(shù)
??locate(str1,str)?
??、??position(str1 in str)?
??和??instr(str, str11)?
??三個(gè)函數(shù)的作用相同,返回子字符串??str1?
??在字符串??str?
?中的開(kāi)始位置。
mysql> select locate('wei', 'yunweijia'), position('wei' in 'yunweijia'), instr('yunweijia', 'wei'); +----------------------------+--------------------------------+---------------------------+ | locate('wei', 'yunweijia') | position('wei' in 'yunweijia') | instr('yunweijia', 'wei') | +----------------------------+--------------------------------+---------------------------+ | 4 | 4 | 4 | +----------------------------+--------------------------------+---------------------------+ 1 row in set (0.00 sec) mysql>
字符串逆序的函數(shù)REVERSE(s)
??reverse(s)?
??將字符串??s?
??反轉(zhuǎn),返回的字符串的順序和??s?
?字符串順序相反。
mysql> select reverse('yunweijia') as coll, reverse('123456789') as coll1; +-----------+-----------+ | coll | coll1 | +-----------+-----------+ | aijiewnuy | 987654321 | +-----------+-----------+ 1 row in set (0.00 sec) mysql>
返回指定位置的字符串的函數(shù)
??elt(n, str1, str2,...,strn)?
??:如果??n=1?
??,則返回值為第一個(gè)字符串??str1?
?;
如果??n=2?
??,則返回值為第二個(gè)字符串??str2?
?;以此類(lèi)推。
如果??n<1?
??或者大于參數(shù)的數(shù)目,則返回值為??null?
?。
mysql> select elt(1, 'ni1', 'wo1', 'ta') as coll, elt(3, 'ni1', 'wo1', 'ta') as coll_1, elt(0, 'ni1', 'wo1', 'ta') as coll_2, elt(4, 'ni1', 'wo1', 'ta') as coll_3; +------+--------+--------+--------+ | coll | coll_1 | coll_2 | coll_3 | +------+--------+--------+--------+ | ni1 | ta | NULL | NULL | +------+--------+--------+--------+ 1 row in set (0.00 sec) mysql>
返回指定字符串位置的函數(shù)FIELD(s,s1,s2,...,sn)
??field(s,s1,s2,...,sn)?
??返回字符串??s?
??在列表??s1,s2,...,sn?
??中第一次出現(xiàn)的位置,如果找不到??s?
?,則直接返回0。
如果??s?
??為??null?
?,則返回時(shí)是0。
mysql> select field('w', 'yun', 'yunwei', 'w', 'yunweijia') as coll, field('x', 'yun', 'yunwei', 'w', 'yunweijia') as coll_1, field(null, 'yun', 'yunwei', 'w', 'yunweijia') as coll_2; +------+--------+--------+ | coll | coll_1 | coll_2 | +------+--------+--------+ | 3 | 0 | 0 | +------+--------+--------+ 1 row in set (0.00 sec) mysql>
返回子串位置的函數(shù)FIND_IN_SET(s1,s2)
??find_in_set(s1,s2)?
??返回字符串??s1?
??在字符串列表??s2?
?中出現(xiàn)的位置,字符串列表是一個(gè)有多個(gè)逗號(hào)分開(kāi)的字符串組成的列表。
如果??s1?
??不在??s2?
??或??s2?
?為空字符串,則返回值為0;
如果任意一個(gè)參數(shù)為??null?
??,則返回值為??null?
?。
mysql> select find_in_set('X', 'yun,xwei,Xwei,X,jia'); +-----------------------------------------+ | find_in_set('X', 'yun,xwei,Xwei,X,jia') | +-----------------------------------------+ | 4 | +-----------------------------------------+ 1 row in set (0.00 sec) mysql>
選取字符串的函數(shù)MAKE_SET(x,s1,s2,...,sn)
??make_set(x,s1,s2,...,sn)?
??函數(shù)按??x?
??的二進(jìn)制數(shù)從??s1,s2,...,sn?
?中選取字符串。
mysql> select make_set(5, 'a', 'b', 'c', 'd') as coll, make_set(1|4, 'a', 'b', 'c', 'd') as coll_1, make_set(1|4, 'a', 'b', null, 'c', 'd') as coll_2, make_set(0, 'a', 'b', 'c', 'd') as coll_3; +------+--------+--------+--------+ | coll | coll_1 | coll_2 | coll_3 | +------+--------+--------+--------+ | a,c | a,c | a | | +------+--------+--------+--------+ 1 row in set (0.00 sec) mysql>
5的二進(jìn)制是??0101?
??,從右往左的第1位和第3位是1,所以選取??a、c?
?;
1的二進(jìn)制是??1?
??,4的二進(jìn)制是??100?
??,進(jìn)行或操作之后的二進(jìn)制是??101?
??,從右往左的第1位和第3位是1,所以選取??a、c?
?;
由于??null?
??不參與計(jì)算,所以不會(huì)添加到結(jié)果中,所以??coll_2?
??只有??a?
?。
到此這篇關(guān)于mysql字符串函數(shù)詳細(xì)匯總的文章就介紹到這了,更多相關(guān)mysql字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql默認(rèn)編碼為UTF-8 通過(guò)修改my.ini實(shí)現(xiàn)方法
這篇文章主要介紹了mysql默認(rèn)編碼為UTF-8 通過(guò)修改my.ini實(shí)現(xiàn)方法的相關(guān)資料,為了防止出現(xiàn)亂碼,Latin1是不支持漢字的,所以要將其改為UTF-8或GBK,需要的朋友可以參考下2017-01-01MySQL學(xué)習(xí)(七):Innodb存儲(chǔ)引擎索引的實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Innodb存儲(chǔ)引擎索引的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Linux7.6二進(jìn)制安裝Mysql8.0.27詳細(xì)操作步驟
大家好,本篇文章主要講的是Linux7.6二進(jìn)制安裝Mysql8.0.27詳細(xì)操作步驟,感興趣的同學(xué)快來(lái)看一看吧,希望對(duì)你起到幫助2021-11-11mysql alter table 修改表命令詳細(xì)介紹
MYSQL ALTER TABLE命令用于修改表結(jié)構(gòu),例如添加/修改/刪除字段、索引、主鍵等等,本文章通過(guò)實(shí)例向大家介紹MYSQL ALTER TABLE語(yǔ)句的使用方法,需要的朋友可以參考一下。2016-10-10mysql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)點(diǎn)與操作小結(jié)
這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)點(diǎn)與操作,總結(jié)分析了mysql數(shù)據(jù)庫(kù)修改數(shù)據(jù)表、增刪改查及數(shù)據(jù)庫(kù)函數(shù)基本功能,需要的朋友可以參考下2020-01-01mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
本篇文章是對(duì)mysql中的導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)命令以及函數(shù)、存儲(chǔ)過(guò)程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07碰到MySQL無(wú)法啟動(dòng)1067錯(cuò)誤問(wèn)題解決方法
創(chuàng)建primay key過(guò)程中發(fā)生了斷電,當(dāng)電腦再次啟動(dòng)時(shí)候,發(fā)現(xiàn)mysql 服務(wù)無(wú)法啟動(dòng),使用 net start 提示 1067錯(cuò)誤;后來(lái)只能通過(guò)手工刪除數(shù)據(jù)文件,日志文件,再啟動(dòng)服務(wù),然后導(dǎo)入數(shù)據(jù)來(lái)完成2013-01-01如何獲取SqlServer2005表結(jié)構(gòu)(字段,主鍵,外鍵,遞增,描述)
本篇文章是對(duì)如何獲取SqlServer2005表結(jié)構(gòu)(字段,主鍵,外鍵,遞增,描述)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06