如何在MySQL中的SELECT期间将CONCAT用作串名?

时间:2015-09-28 11:08:33

标签: mysql select insert concat

有人能告诉我如何在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,它可以正常工作,我得到了我想要的实际值。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

嗯,我必须承认我花了一段时间才明白你在问什么。表2有7列s0到s6,您希望从与日期匹配的列中获取值。是

所以,当然使用

SELECT CURRENT_DATE(), s2

为您提供s2的内容,而

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

给你' s'。如果没有,那将是可怕的。您是否真的希望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;

答案 1 :(得分:0)

你可以这样使用

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