Skip to content

函数与计算字段

拼接与别名、算术运算、文本处理、日期处理、数值函数

计算字段

有时候表里的数据不能直接用,需要加工一下。比如把 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两位日期
%H24小时制
%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 不止于"原样取出",能在查询里直接算结果:

  1. 计算字段用表达式拼接列CONCAT(name, '-', city) 生成新列
  2. AS 起别名 — 让结果列名可读,后续引用也方便
  3. 文本函数CONCAT 拼接、UPPER/LOWER 大小写、TRIM 去空格
  4. 日期函数NOW() 当前时间、YEAR/MONTH/DAY 提取分量
  5. 数值函数ROUND 四舍五入、FLOOR/CEIL 取整、ABS 绝对值

💡 函数不用背,记住常用几个,其余的用到了查文档。

自主练习

  1. 查所有员工,显示"姓名-城市"格式(如 张三-北京
  2. 查员工工资、税率 20% 的税后工资,列名用 after_tax
  3. 把所有城市名转大写显示
  4. 查当前日期和时间

💡 不需要背所有函数,用的时候查一下就好。记住常用的几个:CONCATNOWROUNDUPPER/LOWER


评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8