MySQL中组合字段之concat()函数详解

Cora
Cora
发布时间:2026-10-16 | 6人浏览过
原创

在MySQL数据库中,`concat()`函数可将多字段值组合返回。本文详述其基本用法、别名指定及算术运算技巧。

简介

MySQL是关系型数据库,对象属性通常映射为表中的列。默认查询结果各属性独立呈现。若需将多个字段的值组合返回,或经过特定计算后返回,可使用MySQL提供的字段计算功能,主要包括:

  • 字段拼接
  • 字段执行算术计算

正文

MySQL中实现的字段组合也可在客户机完成,但在服务器端直接实现速度更快。

第1步:准备测试数据

目的:创建包含姓名和民族的测试表

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
  `nation` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '民族',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `user` VALUES (1, '李子捌', '汉族');
INSERT INTO `user` VALUES (2, '张三', '回族');
INSERT INTO `user` VALUES (3, '李四', '维吾尔族');
INSERT INTO `user` VALUES (4, '王五', '蒙古族');

SET FOREIGN_KEY_CHECKS = 1;

需求:获取用户的姓名和民族组合信息

第2步:使用concat()进行字段拼接

入口:执行SELECT查询语句

动作:使用concat()函数组合字段与固定字符

mysql> select concat(name, '(',nation, ')')   from user;
+---------------------------------+
| concat(name, '(',nation, ')') |
+---------------------------------+
| 李子捌(汉族)                  |
| 张三(回族)                    |
| 李四(维吾尔族)                |
| 王五(蒙古族)                  |
+---------------------------------

解析:

  • 使用concat()函数,可组合任意多个元素
  • 元素可以是表字段、固定字符等
  • 元素之间使用,分隔
  • 组合顺序与函数中字符顺序一致

第3步:指定组合后的字段名

问题:默认字段名为concat()的整个函数体,不够直观

解决方案:使用as关键字指定别名

mysql> select concat(name, '(',nation, ')') as user_message  from user;
+------------------+
| user_message     |
+------------------+
| 李子捌(汉族)   |
| 张三(回族)     |
| 李四(维吾尔族) |
| 王五(蒙古族)   |
+------------------+

参数说明:

  • 使用as关键字
  • 后面紧跟着自定义字段名

第4步:执行算术计算

目的:演示字段间的算术操作

MySQL提供以下算术操作符:

操作符 说明
+ 加
- 减
* 乘
/ 除

准备测试表:

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `product`;

CREATE TABLE `product`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '产品名称',
  `price` decimal(10, 2) UNSIGNED NOT NULL COMMENT '产品价格',
  `number` int(11) NOT NULL COMMENT '产品数量',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `product` VALUES (1, 'Apple iPhone 13 (A2634)', 6799.00, 22);
INSERT INTO `product` VALUES (2, 'HUAWEI P50 Pro', 6488.00, 88);
INSERT INTO `product` VALUES (3, 'MIX4', 4999.00, 30);
INSERT INTO `product` VALUES (4, 'OPPO Find X3', 3999.00, 15);
INSERT INTO `product` VALUES (5, 'vivo X70 Pro+', 5999.00, 27);

SET FOREIGN_KEY_CHECKS = 1;

需求:查询目前库存产品总值

语句:

mysql> select product_name, concat(price * number) as gross_value from product;
+-------------------------+-------------+
| product_name            | gross_value |
+-------------------------+-------------+
| Apple iPhone 13 (A2634) | 149578.00   |
| HUAWEI P50 Pro          | 570944.00   |
| MIX4                    | 149970.00   |
| OPPO Find X3            | 59985.00    |
| vivo X70 Pro+           | 161973.00   |
+-------------------------+-------------+

第5步:处理运算符顺序

重要提示:

  • MySQL运算符遵循常规数学顺序:(* /) > (+ -)
  • 合理使用括号()约束执行顺序

示例对比:

mysql> select concat(12 - 3 * 4); 
+--------------------+
| concat(12 - 3 * 4) |
+--------------------+
| 0                  | +--------------------+

mysql> select concat((12 - 3) * 4);
+----------------------+
| concat((12 - 3) * 4) |
+----------------------+
| 36                   | +----------------------+

第6步:处理异常情况

除法异常处理:

  • 被除数为0时不会抛出异常
  • 而是返回NULL
  • 这是MySQL内部对运算的异常处理机制

验证示例:

mysql> select concat(12 / 0);
+----------------+
| concat(12 / 0) |
+----------------+
| NULL           | +----------------+
1 row in set, 1 warning (0.00 sec)

以上就是《MySQL中组合字段之concat()函数详解》的详细内容,更多关于MySQL中组合字段concat()内容的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表