首頁 > 軟體

mysql字串函數詳細彙總

2022-07-26 14:03:17

前言

字串函數主要用來處理資料庫中的字串資料。​​mysql​​中的字串函數有計算字串長度函數、字串合併函數、字串替換函數、字串比較函數、查詢指定字串位置函數等。

計算字串字元數的函數

​CHAR_LENGTH(str)​​​函數計算字串​​str​​所包含的字元個數。一個多位元組字元算作一個單字元。

mysql> select char_length('date'), char_length('yunweijia'), char_length('運維家');
+---------------------+--------------------------+--------------------------+
| char_length('date') | char_length('yunweijia') | char_length('運維家') |
+---------------------+--------------------------+--------------------------+
| 4 | 9 | 3 |
+---------------------+--------------------------+--------------------------+
1 row in set (0.00 sec)

mysql>

計算字串長度的函數

​LENGTH(str)​​​返回值為字串的位元組長度,使用​​utf8​​編碼字元集時,一個漢字是三位元組,一個數位或者字母算1位元組;

mysql> select length('date'), length('yunweijia'), length('運維家');
+----------------+---------------------+---------------------+
| length('date') | length('yunweijia') | length('運維家') |
+----------------+---------------------+---------------------+
| 4 | 9 | 9 |
+----------------+---------------------+---------------------+
1 row in set (0.00 sec)

mysql>

合併字串函數CONCAT(s1,s2,...)、CONCAT_WS(x,s1,s2,...)

​concat(s1,s2,...)​​返回結果為連線引數產生的字串,或許有一個或多個引數。

如果有一個引數為​​null​​​,則返回值為​​null​​。

如果所有引數均為非二進位制字串,則結果為非二進位制字串。

如果自變數中含有任一二進位制字串,則結果為一個二進位制字串。

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​​是分隔符,分隔符的位置放在要連線的兩個字串之間。分隔符可以是一個字串,也可以是其他引數。

如果分隔符是​​null​​​,則結果為​​null​​。該函數會忽略任何分隔符後面的​​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>

替換字串的函數INSERT(s1,x,len,s2)

​insert(s1,x,len,s2)​​​返回字串​​s1​​​,其子字串起始於​​x​​​位置和被字串​​s2​​​取代的​​len​​​字元。如果​​x​​​超過字串長度,則返回值為原始字串。假如​​len​​​的長度大於其他字串的長度,則從位置​​x​​​開始替換。若任何一個引數為​​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>

第一個函數​​insert('yunweijia', 2, 3, 'aaaaaaaa')​​​將​​yunweijia​​​第二個字元開始長度為3的字串,替換成​​aaaaaaaa​​;

第二個函數​​insert('yunweijia', -1, 3, 'bbbbbbbb')​​中由於-1超出了字串長度,直接返回了原字串;

第三個函數​​insert('yunweijia', 2, 99, 'ccccccccc')​​​中由於替換長度99,超出了字串原本長度,所以從第二個字元開始,擷取後面所有的字元,並替換為指定字元​​ccccccccc​​。

字母大小寫轉換函數

大寫轉小寫

​lower(str)​​​或者​​lcase(str)​​​可以將字串​​str​​中的字母字元全部轉換成小寫字母。

mysql> select lower('YUNweiJIA'), lcase('YUNweiJIA');
+--------------------+--------------------+
| lower('YUNweiJIA') | lcase('YUNweiJIA') |
+--------------------+--------------------+
| yunweijia | yunweijia |
+--------------------+--------------------+
1 row in set (0.00 sec)

mysql>

小寫轉大寫

​upper(str)​​​或者​​ucase(str)​​​可以將字串​​str​​中的字母字元全部轉換成大寫字母。

mysql> select upper('yunWEIjia'), ucase('yunWEIjia');
+--------------------+--------------------+
| upper('yunWEIjia') | ucase('yunWEIjia') |
+--------------------+--------------------+
| YUNWEIJIA | YUNWEIJIA |
+--------------------+--------------------+
1 row in set (0.00 sec)

mysql>

獲取指定長度的字串的函數LEFT(s,n)和RIGHT(s,n)

​left(s,n)​​​返回字串​​s​​​開始的最左邊的​​n​​個字元。

mysql> select left('yunweijia', 5);
+----------------------+
| left('yunweijia', 5) |
+----------------------+
| yunwe |
+----------------------+
1 row in set (0.00 sec)

mysql>

​right(s,n)​​​返回字串​​s​​​開始的最右邊的​​n​​個字元。

mysql> select right('yunweijia', 5);
+-----------------------+
| right('yunweijia', 5) |
+-----------------------+
| eijia |
+-----------------------+
1 row in set (0.00 sec)

mysql>

填充字串的函數LPAD(s1,len,s2)和RPAD(s1,len,s2)

​lpad(s1,len,s2)​​​返回字串​​s1​​​,其左邊由字串​​s2​​​填補到​​len​​字元長度。假如​​s1​​的長度大於​​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​​長度大於4,所以不僅不需要填充,反而需要擷取至從左開始4位元字元的字串。

​RPAD(s1,len,s2)​​​返回字串​​s1​​​,其右邊被字串​​s2​​​填補至​​len​​​字元長度。假如字串​​s1​​​的長度大於​​len​​​,則返回值被縮短到​​len​​字元長度。

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​​長度大於4,所以不僅不需要填充,反而需要擷取至從左開始4位元字元的字串。

刪除空格的函數LTRIM(s)、RTRIM(s)和TRIM(s)

​ltrim(s)​​​返回字串​​s​​,字串左側空格字元被刪除;

mysql> select '( yunweijia )', concat('(',ltrim(' yunweijia '),')');
+-----------------+----------------------------------------+
| ( yunweijia ) | concat('(',ltrim(' yunweijia '),')') |
+-----------------+----------------------------------------+
| ( yunweijia ) | (yunweijia ) |
+-----------------+----------------------------------------+
1 row in set (0.00 sec)

mysql>

​rtrim(s)​​​返回字串​​s​​,字串右側空格字元被刪除;

mysql> select '( yunweijia )', concat( '(', rtrim(' yunweijia '), ')' );
+-----------------+--------------------------------------------+
| ( yunweijia ) | concat( '(', rtrim(' yunweijia '), ')' ) |
+-----------------+--------------------------------------------+
| ( yunweijia ) | ( yunweijia) |
+-----------------+--------------------------------------------+
1 row in set (0.00 sec)

mysql>

​trim(s)​​​刪除字串​​s​​兩側的空格;

mysql> select '( yunweijia )', concat( '(', trim(' yunweijia '), ')' );
+-----------------+-------------------------------------------+
| ( yunweijia ) | concat( '(', trim(' yunweijia '), ')' ) |
+-----------------+-------------------------------------------+
| ( yunweijia ) | (yunweijia) |
+-----------------+-------------------------------------------+
1 row in set (0.00 sec)

mysql>

刪除指定字串的函數TRIM(s1 FROM s)

​trim(s1 from s)​​​刪除字串​​s​​​中兩端所有的子字串​​s1​​​。​​s1​​為可選項,在未指定情況下,刪除空格。

mysql> select trim('@#' from '@#@#yunwei@#jia@#@#');
+---------------------------------------+
| trim('@#' from '@#@#yunwei@#jia@#@#') |
+---------------------------------------+
| yunwei@#jia |
+---------------------------------------+
1 row in set (0.00 sec)

mysql>

可以看到,只刪除指定字串兩邊的內容,中間的內容並不會進行刪除。

重複生成字串的函數REPEAT(s.n)

​repeat(s,n)​​​返回一個由重複字串​​s​​​組成的字串,字串​​s​​​的數量等於​​n​​;

如果​​n<=0​​,則返回一個空字串;

如果​​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>

空格函數SPACE(n)

​space(n)​​​返回一個由​​n​​個空格組成的字串。

mysql> select concat('(', space(10), ')');
+-----------------------------+
| concat('(', space(10), ')') |
+-----------------------------+
| ( ) |
+-----------------------------+
1 row in set (0.00 sec)

mysql>

替換函數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>

比較字串大小的函數strcmp(s1,s2)

​strcmp(s1,s2)​​:若所有的字串均相同,則返回0;

若根據當前分類次序,第一個引數小於第二個,則返回-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>

獲取子串的函數SUBSTRING(s,b,len)和MID(s,n,len)

​substring(s,n,len)​​​帶有​​len​​​引數的格式,從字串​​s​​​返回一個長度與​​len​​​字元相同的子字串,起始於位置​​n​​。

也可能對​​n​​​使用一個負值。假如這樣,則子字串的位置起始於字串結尾的​​n​​​字元,即倒數第​​n​​個字元,而不是字串的開頭位置。

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>

匹配子串開始位置的函數

​locate(str1,str)​​​、​​position(str1 in str)​​​和​​instr(str, str11)​​​三個函數的作用相同,返回子字串​​str1​​​在字串​​str​​中的開始位置。

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>

字串逆序的函數REVERSE(s)

​reverse(s)​​​將字串​​s​​​反轉,返回的字串的順序和​​s​​字串順序相反。

mysql> select reverse('yunweijia') as coll, reverse('123456789') as coll1;
+-----------+-----------+
| coll | coll1 |
+-----------+-----------+
| aijiewnuy | 987654321 |
+-----------+-----------+
1 row in set (0.00 sec)

mysql>

返回指定位置的字串的函數

​elt(n, str1, str2,...,strn)​​​:如果​​n=1​​​,則返回值為第一個字串​​str1​​;

如果​​n=2​​​,則返回值為第二個字串​​str2​​;以此類推。

如果​​n<1​​​或者大於引數的數目,則返回值為​​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>

返回指定字串位置的函數FIELD(s,s1,s2,...,sn)

​field(s,s1,s2,...,sn)​​​返回字串​​s​​​在列表​​s1,s2,...,sn​​​中第一次出現的位置,如果找不到​​s​​,則直接返回0。

如果​​s​​​為​​null​​,則返回時是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>

返回子串位置的函數FIND_IN_SET(s1,s2)

​find_in_set(s1,s2)​​​返回字串​​s1​​​在字串列表​​s2​​中出現的位置,字串列表是一個有多個逗號分開的字串組成的列表。

如果​​s1​​​不在​​s2​​​或​​s2​​為空字串,則返回值為0;

如果任意一個引數為​​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>

選取字串的函數MAKE_SET(x,s1,s2,...,sn)

​make_set(x,s1,s2,...,sn)​​​函數按​​x​​​的二進位制數從​​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的二進位制是​​0101​​​,從右往左的第1位和第3位是1,所以選取​​a、c​​;

1的二進位制是​​1​​​,4的二進位制是​​100​​​,進行或操作之後的二進位制是​​101​​​,從右往左的第1位和第3位是1,所以選取​​a、c​​;

由於​​null​​​不參與計算,所以不會新增到結果中,所以​​coll_2​​​只有​​a​​。

到此這篇關於mysql字串函數詳細彙總的文章就介紹到這了,更多相關mysql字串內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com