НЕТ, вы не можете использовать имя столбца как переменную, если это не динамический запрос (или), который вы делаете в коде приложения. Динамический способ запроса будет похож на
SET @sql = CONCAT("SELECT ", @SHIFTIME," FROM `oee_machinenames` where `oee_machinenames`.`ID` = New.NAME");
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Затем измените подготовленный оператор как
SET @result = '';
SET @sql = CONCAT("SELECT ? INTO @result FROM `oee_machinenames` where `oee_machinenames`.`ID` = New.NAME");
PREPARE stmt FROM @sql;
EXECUTE stmt USING @SHIFTIME;
SELECT @result; // Set the data to some other variable
DEALLOCATE PREPARE stmt;
EDIT: Ahh !! не заметил, что это триггер. Думал, что это процедура. Да, вы не можете, но ваш запрос получить @SHIFTIME и SET @SHIFTSELECT := ...
эту обе части можно объединить с измененным запросом, как показано ниже, и поэтому не будет необходимости в динамическом запросе.
Select
(Case
When ((CurTime() > oee_machinenames.Shift1) And
(CurTime() < oee_machinenames.Shift2)) Then oee_machinenames.Shift1
When ((CurTime() > oee_machinenames.Shift2) And
(CurTime() < oee_machinenames.Shift3)) Then oee_machinenames.Shift2
When ((CurTime() > oee_machinenames.Shift3) Or
(CurTime() < oee_machinenames.Shift1)) Then oee_machinenames.Shift3 End)
From
oee_machinenames
where oee_machinenames.ID = New.NAME
Group By
oee_machinenames.ID);