如何在 MySQL 中的 SELECT 期间使用 CONCAT 作为列名?

How can I use CONCAT during SELECT in MySQL as a column name?

谁能告诉我如何在 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 作为值,而不是我想要读取的第二个 table 中的实际值来自:/

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

感谢您的帮助。

你可以这样使用

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 

好吧,我必须承认我花了一段时间才明白你在问什么。 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;
在大多数情况下,

会 select 此人的姓名和工作,但对于名为 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;