為了演示以下的文本操作函數(shù),首先創(chuàng)建一個(gè)names
表格。
mysql> SELECT * FROM names;
+------+
| name |
+------+
| 李四 |
| Amy |
| 123 |
+------+
LENGTH
返回字符串的長(zhǎng)度。
注意:
-
utf8
編碼下,一個(gè)漢字算三個(gè)字符,一個(gè)數(shù)字或字母算一個(gè)字符。 - 其他編碼下,一個(gè)漢字算兩個(gè)字符, 一個(gè)數(shù)字或字母算一個(gè)字符妇拯。
utf8
編碼示例:
mysql> SELECT LENGTH(name) FROM names;
+--------------+
| LENGTH(name) |
+--------------+
| 6 |
| 3 |
| 3 |
+--------------+
其他編碼示例(我的數(shù)據(jù)庫(kù)的character_set_connection
字符集為gbk
):
mysql> SELECT LENGTH('李四');
+----------------+
| LENGTH('李四') |
+----------------+
| 4 |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT LENGTH('Amy');
+---------------+
| LENGTH('Amy') |
+---------------+
| 3 |
+---------------+
1 row in set (0.00 sec)
mysql> SELECT LENGTH(123);
+-------------+
| LENGTH(123) |
+-------------+
| 3 |
+-------------+
1 row in set (0.00 sec)
CHAR_LENGTH
如果我們想得到一個(gè)字符串它的“位數(shù)”長(zhǎng)度,就可以使用CHAR_LENGTH
函數(shù)洗鸵,無論是一個(gè)漢字越锈,一個(gè)英文還是一個(gè)數(shù)字,都看作一個(gè)字符膘滨,這可能也更符合很多時(shí)候我們隊(duì)字符串長(zhǎng)度的獲取需求甘凭。
示例:
mysql> SELECT CHAR_LENGTH(name) FROM names;
+-------------------+
| CHAR_LENGTH(name) |
+-------------------+
| 2 |
| 3 |
| 3 |
+-------------------+
3 rows in set (0.00 sec)
mysql> SELECT CHAR_LENGTH('李四');
+---------------------+
| CHAR_LENGTH('李四') |
+---------------------+
| 2 |
+---------------------+
1 row in set (0.00 sec)
LEFT, RIGHT
LEFT(str, length)
從字符串左邊開始取指定長(zhǎng)度的子字符串并返回;
RIGHT(str, length)
從字符串右邊開始取指定長(zhǎng)度的子字符串并返回火邓。
示例:
mysql> SELECT LEFT(name,1) FROM names;
+--------------+
| LEFT(name,1) |
+--------------+
| 李 |
| A |
| 1 |
+--------------+
3 rows in set (0.02 sec)
mysql> SELECT RIGHT(name,1) FROM names;
+---------------+
| RIGHT(name,1) |
+---------------+
| 四 |
| y |
| 3 |
+---------------+
3 rows in set (0.00 sec)
LOWER, UPPER
LOWER(str)
將字符串轉(zhuǎn)為小寫并返回丹弱;
UPPER(str)
將字符串轉(zhuǎn)為大寫并返回。
示例(中文和數(shù)字不變):
mysql> SELECT LOWER(name) FROM names;
+-------------+
| LOWER(name) |
+-------------+
| 李四 |
| amy |
| 123 |
+-------------+
3 rows in set (0.03 sec)
mysql> SELECT UPPER(name) FROM names;
+-------------+
| UPPER(name) |
+-------------+
| 李四 |
| AMY |
| 123 |
+-------------+
3 rows in set (0.03 sec)
LTRIM, RTRIM, TRIM
LTRIM(str)
將字符串左邊空格去除后返回铲咨;
RTRIM(str)
將字符串右邊空格去除后返回躲胳;
TRIM(str)
將字符串左右兩邊空格去除后返回。
示例:
mysql> SELECT LTRIM(' really good day ');
+------------------------------+
| LTRIM(' really good day ') |
+------------------------------+
| really good day |
+------------------------------+
1 row in set (0.00 sec)
mysql> SELECT RTRIM(' really good day ');
+------------------------------+
| RTRIM(' really good day ') |
+------------------------------+
| really good day |
+------------------------------+
1 row in set (0.02 sec)
mysql> SELECT TRIM(' really good day ');
+-----------------------------+
| TRIM(' really good day ') |
+-----------------------------+
| really good day |
+-----------------------------+
1 row in set (0.00 sec)
SUBSTRING
SUBSTRING(str,m,n)
從字符串第m位開始截取n位字符
- 字符位數(shù)從1開始
- 若n缺省纤勒,則截取至字符串末位
示例:
mysql> SELECT SUBSTRING('really good day',0,1);
+----------------------------------+
| SUBSTRING('really good day',0,1) |
+----------------------------------+
| |
+----------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBSTRING('really good day',1,1);
+----------------------------------+
| SUBSTRING('really good day',1,1) |
+----------------------------------+
| r |
+----------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBSTRING('really good day',8,4);
+----------------------------------+
| SUBSTRING('really good day',8,4) |
+----------------------------------+
| good |
+----------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBSTRING('really good day',8);
+--------------------------------+
| SUBSTRING('really good day',8) |
+--------------------------------+
| good day |
+--------------------------------+
1 row in set (0.00 sec)
CONCAT, CONCAT_WS
CONCAT(str1,str2,...)
連接多個(gè)字符串
- 若有字符串為
NULL
坯苹,則返回NULL
CONCAT_WS(separator,str1,str2,…)
以分隔符連接多個(gè)字符串
- 若
separator
為NULL
,則結(jié)果為NULL
; - 字符串中為
NULL
的摇天,連接時(shí)會(huì)被忽略粹湃。
示例:
CONCAT
mysql> SELECT CONCAT('really','Good','Day');
+-------------------------------+
| CONCAT('really','Good','Day') |
+-------------------------------+
| reallyGoodDay |
+-------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT('really','Good',NULL,'Day');
+------------------------------------+
| CONCAT('really','Good',NULL,'Day') |
+------------------------------------+
| NULL |
+------------------------------------+
1 row in set (0.00 sec)
CONCAT_WS
mysql> SELECT CONCAT_WS('~','really','good','day');
+--------------------------------------+
| CONCAT_WS('~','really','good','day') |
+--------------------------------------+
| really~good~day |
+--------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT_WS('~','really','good',NULL,'day');
+-------------------------------------------+
| CONCAT_WS('~','really','good',NULL,'day') |
+-------------------------------------------+
| really~good~day |
+-------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT_WS(NULL,'really','good',NULL,'day');
+--------------------------------------------+
| CONCAT_WS(NULL,'really','good',NULL,'day') |
+--------------------------------------------+
| NULL |
+--------------------------------------------+
1 row in set (0.00 sec)
INSTR, LOCATE
INSERT(str,substr)
和LOCATE(substr,str)
均返回str
字符串中substr
首次出現(xiàn)的位置,找不到則返回0泉坐。注意二者的參數(shù)列表是反的为鳄。
mysql> SELECT LOCATE('L','HELLO');
+---------------------+
| LOCATE('L','HELLO') |
+---------------------+
| 3 |
+---------------------+
1 row in set (0.05 sec)
mysql> SELECT INSTR('HELLO','L');
+--------------------+
| INSTR('HELLO','L') |
+--------------------+
| 3 |
+--------------------+
mysql> SELECT LOCATE('A','HELLO');
+---------------------+
| LOCATE('A','HELLO') |
+---------------------+
| 0 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT INSTR('HELLO','A');
+--------------------+
| INSTR('HELLO','A') |
+--------------------+
| 0 |
+--------------------+
1 row in set (0.00 sec)
另外,LOCATE(substr,str,pos)
可以從pos
處開始查找substr
,并返回找到的第一個(gè)substr
的位置坚冀。
mysql> SELECT LOCATE('L','HELLO',4);
+-----------------------+
| LOCATE('L','HELLO',4) |
+-----------------------+
| 4 |
+-----------------------+
1 row in set (0.00 sec)