章节索引 :

SQL 字符串函数

1. 前言

慕课解释:SQL 内置的字符串函数主要用于对字符类型的字段进行相关的操作。

本小节,我们将一起学习 SQL 中的字符串函数

字符类型是一个十分重要的类型,因此 SQL 提供了诸多便利的内置函数来供开发者使用。

本小节测试数据如下,请先在数据库中执行:

DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
  id int PRIMARY KEY,
  username varchar(20),
  age int
);
INSERT INTO imooc_user(id,username,age)
VALUES (1,'peter',18),(2,'pedro',24),(3,'jerry',22);

2. 实践

在 SQL 中,常见的字符串函数有如下几个:

函数名 作用
CONCAT 拼接多个字符串
LENGTH 得到字符长度,一个中文汉字算3个字符,数字和字母算1个字符
CHAR_LENGTH 得到字符长度,中文汉字、数字和字母算1个字符
LOWER 将英文字符串全部转为小写
UPPER 将英文字符串全部转为大写
REPLACE 替换字符串,接受3个参数,分别是原字符串,被替代字符串,替代字符串
SUBSTRING 截取字符串,接受3个参数,分别是原字符串,开始截取的位置,截取的长度

2.1 例1 拼接用户名和年龄

通过CONCAT,我们可以把 imooc_user 中的用户名和年龄拼起来当作简略的用户信息:

SELECT CONCAT(username,age) FROM imooc_user;

结果:

+----------------------+
| CONCAT(username,age) |
+----------------------+
| peter18              |
| pedro24              |
| jerry22              |
+----------------------+

2.2 例2 获得用户名长度

有时候,我们想要知道用户名的长度:

SELECT LENGTH(username) FROM imooc_user WHERE id=1;
+------------------+
| LENGTH(username) |
+------------------+
| 5                |
+------------------+

如果,用户名含有中文,或者全是中文,那么我们就必须用CHAR_LENGTH

SELECT CHAR_LENGTH(username) FROM imooc_user WHERE id=1;
+-----------------------+
| CHAR_LENGTH(username) |
+-----------------------+
| 5                     |
+-----------------------+

2.3 例3 用户名大小写

我们想要得到全大写的用户名:

SELECT UPPER(username) FROM imooc_user;
+-----------------+
| UPPER(username) |
+-----------------+
| PETER           |
| PEDRO           |
| JERRY           |
+-----------------+

当然也可以全小写,虽然现在已经是小写了:

SELECT LOWER(username) FROM imooc_user;
+-----------------+
| LOWER(username) |
+-----------------+
| peter           |
| pedro           |
| jerry           |
+-----------------+

2.4 例4 替换用户名

通过REPLACE我们可以替换用户名中的pewe

SELECT REPLACE(username,'pe','we') FROM imooc_user;
+-----------------------------+
| REPLACE(username,'pe','we') |
+-----------------------------+
| weter                       |
| wedro                       |
| jerry                       |
+-----------------------------+

2.5 例5 截取用户名

使用SUBSTRING,我们可以获得用户名的前 3 个字符当作简称。

SELECT SUBSTRING(username, 1, 3) FROM imooc_user;
+---------------------------+
| SUBSTRING(username, 1, 3) |
+---------------------------+
| pet                       |
| ped                       |
| jer                       |
+---------------------------+

3. 个人经验

  • LOWER 和 UPPER 函数在特定的场景是很有用的,如取标题。
  • SUBSTRING 函数在不同的数据库中的实现是不一样的,不推荐在 SQL 里面实用,迁移性很差。