基于工作日的mysql动态列

时间:2017-06-07 23:19:09

标签: mysql select weekday

我有一张桌子:

id 0_open 0_close 1_open 1_close 2_open 2_close 3_open 3_close 4_open 4_close 5_open 5_close 6_open 6_close

1 07:00 18:00 07:00 18:00 07:00 18:00 07:00 18:00 07:00 18:00 07:00 18:00 07:00 18:00
  • 0-6 - 工作日(从星期一到星期日);

如何选择行:

SELECT * FROM table WHERE TIME(NOW()) BETWEEN 2_open AND 2_close

如果今天是星期三(索引:2)?

2 个答案:

答案 0 :(得分:0)

您的SQL结构极度关闭。

通常会创建一个这样的表:

id, open, close, weekday

你可以像这样查询它

SELECT open, close WHERE weekday = DAYOFWEEK()

我猜你无法改变它,所以你被当前的桌子困住了。您可以像这样查询您的信息:

SELECT 0_open, 0_close FROM table WHEN DAYOFWEEK() = 0
UNION
SELECT 1_open, 1_close FROM table WHEN DAYOFWEEK() = 1
UNION
SELECT 2_open, 2_close FROM table WHEN DAYOFWEEK() = 2
UNION
SELECT 3_open, 3_close FROM table WHEN DAYOFWEEK() = 3
UNION
SELECT 4_open, 4_close FROM table WHEN DAYOFWEEK() = 4
UNION
SELECT 5_open, 5_close FROM table WHEN DAYOFWEEK() = 5
UNION
SELECT 6_open, 6_close FROM table WHEN DAYOFWEEK() = 6

答案 1 :(得分:0)

这是你必须在应用程序的业务层中处理的东西(即中间件/后端层中的一个函数,它以日期作为参数并返回列名)。

谈到这些功能,您还可以在function中写一个MySQL来获取日期,并返回两个值,这些值可以在上面的查询中使用。您可以使用MySQL的{​​{3}}库函数来确定列名称。