【问题标题】:How can I use CONCAT during SELECT in MySQL as a column name?如何在 MySQL 中的 SELECT 期间使用 CONCAT 作为列名?
【发布时间】:2015-12-25 14:36:20
【问题描述】:

谁能告诉我如何在SELECT 期间使用来自CONCAT 的结果作为列名?我的尝试如下所示:

INSERT INTO `table_1` (datum, comment)
    SELECT CURRENT_DATE(), CONCAT('s',DAYOFWEEK(CURRENT_DATE())-1)
    FROM `table_2` 
    WHERE id = 12345

因此,我在评论列中得到 s0 - s6 作为值,而不是我想从中读取值的第二个表中实际存在的值:/

funfact:如果我只输入 s0(例如,适用于所有 7 个)而不是 CONCAT,它工作得很好,我得到了我想要的实际值。

感谢您的帮助。

【问题讨论】:

  • 你能先澄清你的问题吗?
  • 对不起,我已经说清楚了。第二个值应该是当前在另一个表中的值。根据星期几,该值在 7 个不同的列中。但是现在我将我的 CONCAT 作为值(s0,s1,s3,...,s6)而不是第二个表中具有这些列名称的实际值。
  • 值 CONCAT('s',DAYOFWEEK(CURRENT_DATE())-1) 没有来自 table2 的任何列名。那么你将如何获得结果中的 table2 值呢?
  • 你到底是什么意思?它应该是s1 FROM table_2 WHERE id = 12345。我希望 CONCAT 成为列的名称!

标签: mysql select insert concat


【解决方案1】:

好吧,我必须承认我花了一段时间才明白你在问什么。 Table2 有 7 列 s0 到 s6,您想从与日期匹配的列中获取值。是吗?

所以,当然使用

SELECT CURRENT_DATE(), s2

给你 s2 的内容,而

SELECT CURRENT_DATE(), CONCAT('s',DAYOFWEEK(CURRENT_DATE())-1)

给你's2'。如果没有,那将是可怕的。您是否真的希望 DBMS 计算一个值,然后检查该值是否恰好与列名匹配?那么

select name, job from person;

在大多数情况下会选择此人的姓名和工作,但对于名为 Job 的人,您将获得两次工作。你看这不可能吧?

因此请检查您的表达式结果并从相应的列中读取:

insert into table_1 (datum, comment)
select 
  current_date(), 
  case dayofweek(current_date()) - 1 
    when 0 then s0
    when 1 then s1
    when 2 then s2
    when 3 then s3
    when 4 then s4
    when 5 then s5
    when 6 then s6
  end
from table_2 where id = 12345;

【讨论】:

  • 好的,我明白了。感谢结果和解释:)
【解决方案2】:

你可以这样使用

INSERT INTO `table_1` (datum, comment)
SELECT CURRENT_DATE(), 
CASE DAYOFWEEK(CURRENT_DATE())-1
 WHEN 0 THEN s0
 WHEN 1 THEN s1
 WHEN 2 THEN s2
 WHEN 3 THEN s3
 WHEN 4 THEN s4
 WHEN 5 THEN s5
 WHEN 6 THEN s6
 END
FROM `table_2` WHERE id = 12345 

【讨论】:

  • 工作正常。非常感谢!
猜你喜欢
  • 2020-03-13
  • 1970-01-01
  • 2014-02-23
  • 2021-11-28
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2017-08-29
  • 2019-11-11
相关资源
最近更新 更多