我有两张桌子。一个包含一些日期的数据,第二个包含所有公共假期。我的任务是确定表中每条记录的 DayType。
例如,如果日期为“2015-09-08 22:33”,则输出为“周日/夜班”,或者如果日期为“2015-06-08 12:20”,则输出为“正常日”。
我使用了选择案例,但我没有得到好的结果。
在我的示例SQL Fiddle中获取战利品
有没有其他方法可以检查日期而不是使用 select case 语句?
我有两张桌子。一个包含一些日期的数据,第二个包含所有公共假期。我的任务是确定表中每条记录的 DayType。
例如,如果日期为“2015-09-08 22:33”,则输出为“周日/夜班”,或者如果日期为“2015-06-08 12:20”,则输出为“正常日”。
我使用了选择案例,但我没有得到好的结果。
在我的示例SQL Fiddle中获取战利品
有没有其他方法可以检查日期而不是使用 select case 语句?
您订购的案例需要工作。CASE
当 a为真时 MySQL 停止 'CASING'
您的第一个 CASE 是WHEN (WEEKDAY(pdate) BETWEEN 0 AND 4) THEN "Normal Day"
这意味着它不会在工作日检查假期
首先检查假期,然后是夜班,然后是工作日/周末
SELECT tbltest.datac,
(
CASE
WHEN (DATE(pdate) IN (SELECT HolidayDate FROM tblholidays)) THEN "Holiday"
WHEN (TIME(pdate) > '22:00:00' && (DAYNAME(pdate)="Sunday")) THEN "Night shift/Sunday"
WHEN (TIME(pdate) > '22:00:00') THEN "Night shift"
WHEN (WEEKDAY(pdate) BETWEEN 0 AND 4) THEN "Normal Day"
WHEN ((DAYNAME(pdate))="Saturday") THEN "Saturday"
WHEN ((DAYNAME(pdate))="Sunday") THEN "Sunday"
END) AS DayType
FROM tbltest