Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich CONCAT während SELECT in MySQL als Spaltennamen verwenden?

Nun, ich muss zugeben, ich habe eine Weile gebraucht, um zu verstehen, was Sie fragen. Tabelle2 hat 7 Spalten s0 bis s6 und Sie möchten den Wert aus der Spalte erhalten, die dem Datum entspricht. Ja?

Also natürlich mit

SELECT CURRENT_DATE(), s2

gibt Ihnen den Inhalt von s2, wohingegen

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

gibt dir 's2'. Es wäre schrecklich, wenn nicht. Erwarten Sie wirklich, dass das DBMS einen Wert berechnet und dann überprüft, ob dieser Wert zufällig mit einem Spaltennamen übereinstimmt? Dann

select name, job from person;

würde in den meisten Fällen den Namen und den Job der Person auswählen, aber für die Person mit dem Namen Job würden Sie den Job stattdessen zweimal bekommen. Sie sehen, dass dies nicht erwünscht sein kann, oder?

Überprüfen Sie also stattdessen Ihr Ausdrucksergebnis und lesen Sie in der entsprechenden Spalte nach:

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;