如何使用SELECT语句的列部分中从DATE_FORMAT()返回的值

时间:2018-07-30 18:56:17

标签: mysql

该表有8列,doctor_id,其他7列以星期名称命名(星期六,星期日,..) 如果一天(例如:星期六)在(例如:10:00:00)安排了一位医生(例如:id = 1),它将像这样插入:

INSERT INTO doctors_schedule (doctor_id, sat) VALUES (1,"10:00:00");

触发器将每天在特定时间触发以获取今天的时间表,它将在其中使用以下查询:

SELECT doctor_id, DATE_FORMAT(NOW(), "%a")
FROM doctors_schedule
WHERE DATE_FORMAT(NOW(), "%a") IS NOT NULL;

此查询没有引发错误,但是它返回所有记录而没有任何过滤器

2 个答案:

答案 0 :(得分:1)

您不能像这样动态确定列名。 DATE_FORMAT将返回字符串值,而不是列名。像这样的东西可能会起作用。

SELECT doctor_id, COALESCE(`Sun`, `Mon`, ... ) AS timeOfDay
FROM doctors_schedule
WHERE CASE DATE_FORMAT(NOW(), '%a') 
           WHEN 'Sun' THEN `Sun`
           WHEN 'Mon' THEN `Mon`
           ... and so on
      END IS NOT NULL

COALESCE返回其列表中的第一个非空值;如果“天”字段具有空字符串而不是空值,则可以COALESCE(NULLIF(Sun, ''), NULLIF(Mon, ''), ...) AS timeOfDay,或使用类似于WHERE中的CASE(实际上,除了后面的IS NOT NULL部分之外,都是相同的。)

答案 1 :(得分:0)

如果我没记错的话,它将始终返回null,因为您正在筛选的现在不是null

> SELECT doctor_id FROM doctors_schedule WHERE DATE_FORMAT(NOW(), "%a")
> IS NOT NULL;

这是您的过滤器: 格式化current date格式化is not null

的当前日期

而不是NOW()使用您的日期列