-1

我有两张桌子。一个包含一些日期的数据,第二个包含所有公共假期。我的任务是确定表中每条记录的 DayType。

例如,如果日期为“2015-09-08 22:33”,则输出为“周日/夜班”,或者如果日期为“2015-06-08 12:20”,则输出为“正常日”。

我使用了选择案例,但我没有得到好的结果。

在我的示例SQL Fiddle中获取战利品

有没有其他方法可以检查日期而不是使用 select case 语句?

4

1 回答 1

1

您订购的案例需要工作。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
于 2015-08-10T11:48:36.137 回答