文本函数:Concat()和Concat_ws()、length()和char_length()、Lower()和Upper()、Lpad()和Rpad()

69 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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 string str, measured in bytes. A multibyte character counts as multiple bytes.
  • char_length():Returns the length of the string str, 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)

三、后话

好了,今天的文章内容就到这里,感谢观看。