【问题标题】:Weird behaviour of SUM and CONCAT in MySqlMySql 中 SUM 和 CONCAT 的奇怪行为
【发布时间】:2014-02-25 18:49:57
【问题描述】:

如果我想对 MySQL 中的特定数字列求和,我会这样做

SELECT SUM(MyColumn) FROM MyTable WHERE 1;

这会返回例如数字 100。

但我想在总和值前面加上一些文本,所以我这样做了

SELECT CONCAT('Sum is: ',SUM(MyColumn)) FROM MyTable WHERE 1;

但我得到的不是Sum is: 100,而是546573743a20343030

这是错误还是功能?我做错了什么?

更新

SELECT CONCAT('Sum is: ',CAST(SUM(MyColumn) AS varchar(20))) FROM MyTable WHERE 1;

无法转换为 varchar:出现 SQL 语法错误。

【问题讨论】:

  • 似乎对我有用:sqlfiddle.com/#!2/b3a2f/1 MyColumn 的类型是什么?您可以使用sqlfiddle.com 来创建此问题的示例吗?
  • @FreshPrinceOfSO:没有CAST 也可以正常工作:sqlfiddle.com/#!2/b3a2f/1
  • @NumberFour 使用char
  • 啊啊,明白了。字符有效!
  • @NumberFour 显然 MySQL 不接受 varchar 作为强制转换类型。另一个很棒的“功能”

标签: mysql aggregate-functions


【解决方案1】:

正如FreshPrinceOfSO 在我的问题下面的 cmets 中建议的那样,MySQL 服务器不处理对varchar 的强制转换。

所以即使查询

SELECT CONCAT('Sum is: ',CAST(SUM(MyColumn) AS varchar(20))) FROM MyTable WHERE 1;

导致语法错误,转换为 char 可以正常工作:

SELECT CONCAT('Sum is: ',CAST(SUM(MyColumn) AS char(20))) FROM MyTable WHERE 1;

【讨论】:

  • 工作就像一个魅力!非常感谢。
猜你喜欢
  • 1970-01-01
  • 2017-03-13
  • 2011-07-07
  • 1970-01-01
  • 2013-10-23
  • 2016-08-12
  • 2012-08-04
  • 2015-05-13
  • 1970-01-01
相关资源
最近更新 更多