【问题标题】:mySQL : Select "variable" as "variable2" from tablemySQL:从表中选择“variable”作为“variable2”
【发布时间】:2015-10-15 09:47:17
【问题描述】:

我在 mySQL 中使用这行代码:

select sum(amount) as 'October_Amount' from table
where month(date)=month(now());

我想在“Month_Amount”字符串中获取当前月份(例如“October_Amount”)。我试过这个:

select sum(amount) as monthname(curdate()) from table
where month(date)=month(now());

但它不起作用。 (monthname(now()))(monthname(curdate())) 是字符串,所以它应该可以工作。我尝试了很多版本,但没有找到任何建议。

【问题讨论】:

  • 你能解释一下为什么它不起作用吗?你有错误吗?错误是什么?还是返回时没有数据?
  • @SpyrosK Εδώ:错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 '(now()) from table where month(date)=month(now())' 附近使用
  • 您不能动态更改语句中的列名,您需要使用准备好的语句来更改实际查询(参见dev.mysql.com/doc/refman/5.0/en/…

标签: mysql variables select


【解决方案1】:

如果你想使用动态列名,你可以像这样使用 PREPARED STATEMENTS

SET @date = DATE_FORMAT( CURDATE(),'%M');
SET @query = CONCAT('SELECT SUM(amount) AS "', @date, '_Amount" FROM table where MONTH(date) = MONTH(NOW())');
PREPARE dynamic_statement FROM @query;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;

【讨论】:

  • 不需要准备好的语句,如果您使用任何编程语言进行查询,只需动态地进行查询。
【解决方案2】:

试试这个:

select sum(amount), monthname(curdate()) from table
where month(date)=month(now());

或者这个:

select sum(amount), CONCAT('AMOUNT_', monthname(curdate())) from table
where month(date)=month(now());

【讨论】:

  • @bluntT 这不是我想要的。 monthname(curdate()) 显然有效。但是当我把它放在“AS”之后的表达式中时它不起作用。
  • @ApoloRadomer 您无法动态设置列名。我认为这是您查询中的错误。
  • @BluntT 现在有办法动态设置 column_name 吗? oO
  • @ApoloRadomer 动态设置列名的唯一方法是在代码中创建列名(例如 PHP)并将其附加到查询中。
【解决方案3】:
select  CONCAT(sum(amount), '_', month(now())) from table where
month(date)=month(now());

【讨论】:

  • 'monthname(curdate())' 有效。问题是它在 SELECT AS 之后不起作用。
猜你喜欢
  • 2017-04-12
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多