Reputation: 384
This is not working. My column names include Mon, Tue, Wed, Thu, Fri, Sat, Sun set to 0 or 1. I am trying to see if column name is 0 or 1 based on the 3-digit current day of the week.
SET @var = DATE_FORMAT(NOW(), '%a')
SELECT *, @var
FROM team LEFT JOIN fav ON team.Tag = fav.Tag WHERE ID = '123456' AND @var = '1'
ORDER BY team.Name
Upvotes: 0
Views: 185
Reputation: 164204
The variable's @var
value is a string literal and can't be used as a column.
You can do what you want with a CASE
expression:
SET @var = DATE_FORMAT(NOW(), '%a');
SELECT *, @var
FROM team LEFT JOIN fav
ON team.Tag = fav.Tag
WHERE ID = '123456'
AND '1' = CASE @var
WHEN 'Mon' THEN Mon
WHEN 'Tue' THEN Tue
WHEN 'Wed' THEN Wed
WHEN 'Thu' THEN Thu
WHEN 'Fri' THEN Fri
WHEN 'Sat' THEN Sat
WHEN 'Sun' THEN Sun
END
ORDER BY team.Name;
Or without the variable:
SELECT *
FROM team LEFT JOIN fav
ON team.Tag = fav.Tag
WHERE ID = '123456'
AND '1' = CASE DATE_FORMAT(NOW(), '%a')
WHEN 'Mon' THEN Mon
WHEN 'Tue' THEN Tue
WHEN 'Wed' THEN Wed
WHEN 'Thu' THEN Thu
WHEN 'Fri' THEN Fri
WHEN 'Sat' THEN Sat
WHEN 'Sun' THEN Sun
END
ORDER BY team.Name;
Inside the CASE
expression qualify the columns Mon, Tue, Wed, Thu, Fri, Sat, Sun with the table (team
or fav
) they belong.
Upvotes: 2