函数与计算字段
拼接与别名、算术运算、文本处理、日期处理、数值函数
计算字段
有时候表里的数据不能直接用,需要加工一下。比如把 name 和 city 拼在一起显示、算一下工资扣税后多少——这就是计算字段。
计算字段不是表里存的列,而是 SELECT 的时候当场算出来的。
拼接:CONCAT
把多列拼成一个字符串:
sql
SELECT CONCAT(name, '(', city, ')') FROM users;+---------------------------------------+
| CONCAT(name, '(', city, ')') |
+---------------------------------------+
| 张三(北京) |
| 李四(上海) |
| 王五(广州) |
| ... |
+---------------------------------------+CONCAT 把括号里的东西按顺序拼在一起,可以拼列,也可以拼任意文本。
⚠️ 多数数据库用
||拼接,但 MySQL 用CONCAT(),别记混了。
算术运算
SQL 里可以直接做加减乘除:
sql
SELECT name,
salary,
salary * 0.8 AS after_tax,
salary * 12 AS annual
FROM users;+--------+----------+-----------+----------+
| name | salary | after_tax | annual |
+--------+----------+-----------+----------+
| 张三 | 8000.00 | 6400.00 | 96000.0 |
| 李四 | 12000.00 | 9600.00 | 144000.0 |
| ... | ... | ... | ... |
+--------+----------+-----------+----------+支持的运算符:+ - * /,和数学一样。
别名 AS
上面那个查询的列名 salary * 0.8 太丑了。用 AS 起别名:
sql
SELECT name,
salary,
salary * 0.8 AS after_tax
FROM users;AS 也可以省略:
sql
SELECT name, salary * 0.8 after_tax FROM users;效果一样,但有 AS 更清晰。
文本处理函数
大小写转换
sql
SELECT UPPER('hello'); -- HELLO
SELECT LOWER('WORLD'); -- world去除空格
sql
SELECT TRIM(' hello '); -- 'hello' 去掉两边空格
SELECT LTRIM(' hello'); -- 'hello' 去掉左边
SELECT RTRIM('hello '); -- 'hello' 去掉右边取子串
sql
SELECT SUBSTRING('hello world', 1, 5); -- 'hello' 从第1个字符开始取5个
SELECT SUBSTRING('hello world', 7); -- 'world' 从第7个取到最后长度
sql
SELECT LENGTH('hello'); -- 5⚠️
LENGTH返回字节数,中文字符占 3 字节。想看字符数用CHAR_LENGTH()。
日期函数
日期处理是数据库里的常客。
获取当前时间
sql
SELECT NOW(); -- 2026-06-13 14:30:00
SELECT CURDATE(); -- 2026-06-13
SELECT CURTIME(); -- 14:30:00提取年/月/日
sql
SELECT YEAR('2026-06-13'); -- 2026
SELECT MONTH('2026-06-13'); -- 6
SELECT DAY('2026-06-13'); -- 13日期差值
sql
SELECT DATEDIFF('2026-06-13', '2026-01-01'); -- 163 天日期格式化
sql
SELECT DATE_FORMAT('2026-06-13', '%Y年%m月%d日'); -- 2026年06月13日常用格式符:
| 格式符 | 含义 |
|---|---|
%Y | 四位年份 |
%m | 两位月份 |
%d | 两位日期 |
%H | 24小时制 |
%i | 分钟 |
%S | 秒 |
数值函数
sql
SELECT ROUND(3.14159, 2); -- 3.14 四舍五入保留2位
SELECT CEIL(3.1); -- 4 向上取整
SELECT FLOOR(3.9); -- 3 向下取整
SELECT ABS(-10); -- 10 绝对值小结
计算字段让 SELECT 不止于"原样取出",能在查询里直接算结果:
- 计算字段用表达式拼接列 —
CONCAT(name, '-', city)生成新列 - AS 起别名 — 让结果列名可读,后续引用也方便
- 文本函数 —
CONCAT拼接、UPPER/LOWER大小写、TRIM去空格 - 日期函数 —
NOW()当前时间、YEAR/MONTH/DAY提取分量 - 数值函数 —
ROUND四舍五入、FLOOR/CEIL取整、ABS绝对值
💡 函数不用背,记住常用几个,其余的用到了查文档。
自主练习
- 查所有员工,显示"姓名-城市"格式(如
张三-北京) - 查员工工资、税率 20% 的税后工资,列名用
after_tax - 把所有城市名转大写显示
- 查当前日期和时间
💡 不需要背所有函数,用的时候查一下就好。记住常用的几个:
CONCAT、NOW、ROUND、UPPER/LOWER。