如何为MySQL整个SELECT语句批量应用ROUND()函数?
MySQL 能否为整个SELECT语句批量应用ROUND()函数?
不行,MySQL本身没有支持直接对整个SELECT结果集批量应用ROUND()函数的语法,必须针对每个需要取整的列单独调用ROUND()。不过可以通过以下几种方式减少重复代码的编写:
- 创建视图封装逻辑
如果需要频繁查询这些保留两位小数的列,可以创建一个视图把ROUND()的逻辑封装进去,后续直接查询视图即可:
CREATE VIEW table_rounded AS SELECT ROUND(col_1, 2) AS col_1, ROUND(col_2, 2) AS col_2, ROUND(col_3, 2) AS col_3 FROM TABLE_NAME;
查询时只需执行:
SELECT * FROM table_rounded;
- 用动态SQL自动生成查询语句
如果涉及的列较多,可以借助动态SQL自动拼接包含ROUND()的列列表,避免手动重复编写:
-- 生成带ROUND()的列字符串 SET @cols = ( SELECT GROUP_CONCAT('ROUND(', column_name, ', 2) AS ', column_name) FROM information_schema.columns WHERE table_name = 'TABLE_NAME' AND column_name IN ('col_1', 'col_2', 'col_3') ); -- 拼接完整查询语句并执行 SET @sql = CONCAT('SELECT ', @cols, ' FROM TABLE_NAME'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
- 自定义短名函数简化调用
如果所有需要取整的列都是数值类型且固定保留两位小数,可以创建一个短名的自定义函数,减少重复输入的字符:
DELIMITER // CREATE FUNCTION r2(num DECIMAL(10,4)) RETURNS DECIMAL(10,2) BEGIN RETURN ROUND(num, 2); END // DELIMITER ;
查询时可以简化为:
SELECT r2(col_1), r2(col_2), r2(col_3) FROM TABLE_NAME;
内容的提问来源于stack exchange,提问作者nithish08
相关产品推荐
相关产品推荐

