MySQL的计算字段

为什么要使用计算字段

存储在数据库表中的数据一般不是应用程序所需要的格式。需要在服务端进行转换、计算或者格式化,计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。

只有数据库知道SELECT语句中哪些列是实际的表列,哪些列是计算字段。从客户端的角度来看,计算字段的数据是以与其他列的数据相同的方式返回的。

理论上格式化、转换或计算字段,在客户端也可以完成,但是,在服务端完成效率更高。

拼接字段

假设存在表fruit_lists如下:

fruit_namepricenum
苹果520
草莓735
荔枝1560
冬枣1415

需要输出一列格式为:fruit_name(price),那么就可以使用MySQL提供的Concat()函数来拼接两个列。

SELECT Concat(列名1,列名2) FROM 表名;

输出结果如下:

mysql> SELECT Concat(fruit_name,'(',price,'元)') FROM fruit_list;
+------------------------------------+
| Concat(fruit_name,'(',price,'元)') |
+------------------------------------+
| 苹果(5元)                          |
| 草莓(7元)                          |
| 荔枝(15元)                         |
| 冬枣(14元)                         |
+------------------------------------+
4 rows in set (0.00 sec)

当拼接时发现字段左右存在冗余空格时,可以使用一下函数进行清除:

  • RTrim():删除字符串右边的空格
  • LTrim():删除字符串左边的空格
  • Trim():删除字符串两侧的空格

使用别名

我们通过拼接字段,输出了一个在数据库中不存在的列,但是这一列当前还没有列名,应用程序还无法获取到,因此需要给这一列起一个名字。

在MySQL中,别名是一个字段或值的替换名。别名用AS关键字赋予。

SELECT Concat(列名1,列名2) AS 别名 FROM 表名;

输出结果如下:

mysql> SELECT Concat(fruit_name,'(',price,'元)') AS name_price FROM fruit_list;
+------------+
| name_price |
+------------+
| 苹果(5元)  |
| 草莓(7元)  |
| 荔枝(15元) |
| 冬枣(14元) |
+------------+
4 rows in set (0.00 sec)

别名还有其他用途。常见的用途包括在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它,等等。

执行算术计算

计算字段的另一常见用途是对检索出的数据进行算术计算。

例如需要根据数量和单价计算出水果的总价,可以使用算术操作符。

SELECT 列名1 算术操作符 列名2 FROM 表名;

输出结果如下:

mysql> SELECT fruit_name, price, num,  price * num AS total_price FROM fruit_list;
+------------+-------+------+-------------+
| fruit_name | price | num  | total_price |
+------------+-------+------+-------------+
| 苹果       |     5 |   20 |         100 |
| 草莓       |     7 |   35 |         245 |
| 荔枝       |    15 |   60 |         900 |
| 冬枣       |    14 |   15 |         210 |
+------------+-------+------+-------------+
4 rows in set (0.00 sec)

MySQL支持下表中列出的基本算术操作符。此外,圆括号可用来区分优先顺序。

操作符说明
+
-
*
/

可以在不使用数据库和表的情况下在MySQL中测试函数或计算。

测试算术操作符:

mysql> SELECT 2*3;
+-----+
| 2*3 |
+-----+
|   6 |
+-----+
1 row in set (0.00 sec)

测试Trim()函数,删除字符串左右空格。

mysql> SELECT Trim('             abc           ');
+-------------------------------------+
| Trim('             abc           ') |
+-------------------------------------+
| abc                                 |
+-------------------------------------+
1 row in set (0.00 sec)

测试Now()函数,获取当前时间。

mysql> SELECT Now();
+---------------------+
| Now()               |
+---------------------+
| 2021-04-27 22:56:31 |
+---------------------+
1 row in set (0.00 sec)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值