开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情
一、前言
大家好,今天文章的内容是几个文本函数的记录:
Concat()'和'Concat_ws()length()'和'char_length()Lower()'和'Upper()Lpad()'和'Rpad()
二、内容
length 和 char_length
在 MySQL 中,有两个函数可以返回字符串的长度,分别是length()和char_length()。
但这两个函数的用法不同。根据官方文档的记录如下:
length():Returns the length of the stringstr, measured in bytes. A multibyte character counts as multiple bytes.char_length():Returns the length of the stringstr, measured in code points. A multibyte character counts as a single code point.
可以看到
length()函数的计算单位是字节,字符串共多少字节返回结果就是多少。其中,如果是utf8编码,则一个汉字算三个字节,一个数字或字母算一个字符;如果是gbk编码,则一个汉字算两个字节,一个数字或字母算一个字节。- 而
char_length()函数的计算单位就是代码点,或者说字符。即不管是汉字、数字还是字母都是算一个字符。
比如:
mysql> select length('我爱中国'),char_length('我爱中国');
+--------------------+-------------------------+
| length('我爱中国') | char_length('我爱中国') |
+--------------------+-------------------------+
| 8 | 4 |
+--------------------+-------------------------+
1 row in set (0.00 sec)
mysql> select length('test'),char_length('test');
+----------------+---------------------+
| length('test') | char_length('test') |
+----------------+---------------------+
| 4 | 4 |
+----------------+---------------------+
1 row in set (0.00 sec)
Concat 和 Concat_ws
Concat(str1, str2,...)函数用于返回多个子串合并而成的新字符串。
mysql> SELECT Concat('H', 'e', 'l', 'l', 'o');
+---------------------------------+
| Concat('H', 'e', 'l', 'l', 'o') |
+---------------------------------+
| Hello |
+---------------------------------+
1 row in set (0.00 sec)
备注:
如果某个参数的值为
NULL,则函数的返回结果为NULL。
另外,Concat()函数有一种特殊的形式,即Concat_ws()函数。该函数同样是用于合并多个子串,不同在于可以添加分隔符。
在Concat_ws(separator, str1, str2,...)函数中,参数separator表示分隔符,会被添加到要合并的子串之间。
mysql> SELECT Concat_ws(',', 'First', 'Second', 'Last');
+-------------------------------------------+
| Concat_ws(',', 'First', 'Second', 'Last') |
+-------------------------------------------+
| First,Second,Last |
+-------------------------------------------+
1 row in set (0.00 sec)
Lower 和 Upper
Lower()函数用于将字符串的所有字母变成小写字母,同Lcase()。
mysql> SELECT Lower("HELLO");
+----------------+
| Lower("HELLO") |
+----------------+
| hello |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT Lcase("HELLO");
+----------------+
| Lcase("HELLO") |
+----------------+
| hello |
+----------------+
1 row in set (0.00 sec)
与前面相反,Upper()函数用于将字符串的所有字母变成大写字母,同Ucase()。
mysql> SELECT Upper("hello");
+----------------+
| Upper("hello") |
+----------------+
| HELLO |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT Ucase("hello");
+----------------+
| Ucase("hello") |
+----------------+
| HELLO |
+----------------+
1 row in set (0.00 sec)
Lpad 和 Rpad
Lpad(str, len, padstr):在字符串str的开始位置填充字符串padstr,使新字符串的长度达到len。- 另外需要注意,如果字符串
str本身的长度就长于len,那么最后的结果将是主串str缩短为len个字符。
mysql> select Lpad('abc',7,'oo');
+--------------------+
| Lpad('abc',7,'oo') |
+--------------------+
| ooooabc |
+--------------------+
1 row in set (0.00 sec)
mysql> select Lpad('abc',1,'oo');
+--------------------+
| Lpad('abc',1,'oo') |
+--------------------+
| a |
+--------------------+
1 row in set (0.00 sec)
Rpad(str, len, padstr):在字符串str的结尾处填充字符串padstr,使新字符串的长度达到len。- 另外需要注意,如果字符串
str本身的长度就长于len,那么最后的结果将是主串str缩短为len个字符。
mysql> select Rpad('abc',7,'oo');
+--------------------+
| Rpad('abc',7,'oo') |
+--------------------+
| abcoooo |
+--------------------+
1 row in set (0.00 sec)
mysql> select Rpad('abc',1,'oo');
+--------------------+
| Rpad('abc',1,'oo') |
+--------------------+
| a |
+--------------------+
1 row in set (0.00 sec)
三、后话
好了,今天的文章内容就到这里,感谢观看。