使用 select 大小写检查具体日期
Check specific dates using select case
我有两个 table。第一个包含一些日期的数据,第二个包含所有 public 个假期。我的任务是为 table.
中的每条记录确定 DayType
例如,如果日期为“2015-09-08 22:33”,则输出为 "Sunday/Night Shift",或者如果日期为“2015-06-08 12:20”,则输出为 "Normal day".
我用过select案例,但效果不佳。
掠夺我的样本SQL Fiddle
除了使用 select case 语句之外,还有其他检查日期的方法吗?
您的案件订单需要处理。
当 CASE
为真时 MySQL 停止 'CASING'
您的第一个案例是 WHEN (WEEKDAY(pdate) BETWEEN 0 AND 4) THEN "Normal Day"
这意味着它不会在工作日检查假期
先查节假日再查夜班,再查weekdays/weekends
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
我有两个 table。第一个包含一些日期的数据,第二个包含所有 public 个假期。我的任务是为 table.
中的每条记录确定 DayType例如,如果日期为“2015-09-08 22:33”,则输出为 "Sunday/Night Shift",或者如果日期为“2015-06-08 12:20”,则输出为 "Normal day".
我用过select案例,但效果不佳。
掠夺我的样本SQL Fiddle
除了使用 select case 语句之外,还有其他检查日期的方法吗?
您的案件订单需要处理。
当 CASE
为真时 MySQL 停止 'CASING'
您的第一个案例是 WHEN (WEEKDAY(pdate) BETWEEN 0 AND 4) THEN "Normal Day"
这意味着它不会在工作日检查假期
先查节假日再查夜班,再查weekdays/weekends
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