如何在select语句的列部分使用date\ U format()返回的值

kb5ga3dv  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(205)

该表有8列,doctor\u id和其他7列,分别以星期(sat、sun,…)的名称命名。如果医生(ex:id=1)安排在一天(ex:sat)的(ex:10:00:00)中,则会这样插入:

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;

这个查询没有抛出错误,但是它返回所有没有任何筛选器的记录

3qpi33ja

3qpi33ja1#

如果我没有弄错,这将总是返回null,因为你现在过滤的不是null

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

这是您的过滤器:格式化当前日期
current date 格式化 is not null 而不是 NOW() 使用日期列

s5a0g9ez

s5a0g9ez2#

您不能这样动态地确定列名。date格式将返回字符串值,而不是列名。不过,像这样的办法也许行得通。

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返回其列表中的第一个非空值;如果“day”字段具有空字符串而不是空值,则可以 COALESCE(NULLIF(Sun, ''), NULLIF(Mon, ''), ...) AS timeOfDay ,或使用类似于where中的大小写(实际上,除了 IS NOT NULL 后面的部分。)

相关问题