update nombre group_concat funcion concatenar concat_ws columnas campos mysql select insert concat

nombre - group_concat mysql



¿Cómo puedo usar CONCAT durante SELECT en MySQL como un nombre de columna? (2)

¿Alguien puede decirme cómo puedo usar un resultado de un CONCAT como un nombre de columna durante SELECCIONAR? Mi intento se ve así:

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

Como resultado obtengo s0 - s6 como un valor en mi campo de comentarios en lugar del valor que realmente está en mi 2da tabla de la que quiero leer el valor de: /

funfact: si simplemente escribo s0 (como un ejemplo, funciona con los 7) en lugar de CONCAT, funciona bien y obtengo el valor real que quiero.

Gracias por tu ayuda


Bueno, debo admitir que me tomó un tiempo entender lo que estás preguntando. Table2 tiene 7 columnas s0 a s6 y desea obtener el valor de la columna que coincide con la fecha. ¿Sí?

Entonces, por supuesto usando

SELECT CURRENT_DATE(), s2

te da el contenido de s2, mientras que

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

te da ''s2''. Sería horrible si no. ¿Realmente espera que el DBMS calcule un valor y luego verifique si ese valor coincide con el nombre de una columna? Entonces

select name, job from person;

seleccionaría el nombre y el trabajo de la persona en la mayoría de los casos, pero para la persona llamada Job, obtendría el trabajo dos veces. Ves que esto no se puede desear, ¿verdad?

Entonces, verifique el resultado de su expresión y lea de la columna correspondiente:

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;


Puedes usar así

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