MySQL中组合字段之concat()函数详解
在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()内容的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









