使用精选案例

时间:2015-08-10 11:43:48

标签: mysql select-case

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

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

我使用了精选案例但我没有取得好成绩。

Thake在我的样本SQL Fiddle

中掠夺

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

1 个答案:

答案 0 :(得分:1)

您的案件顺序需要工作。 MySQL停止&#39; CASING&#39;当CASE为真时

您的第一个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