-1

私は2つのテーブルを持っています。1 つはいくつかの日付のデータを含み、2 番目はすべての祝日で構成されています。私の仕事は、テーブル内の各レコードの DayType などを決定することです。

たとえば、日付が「2015-09-08 22:33」の場合、出力は「日曜/夜勤」、日付が「2015-06-08 12:20」の場合、「通常の日」が出力されます。

select case を使用しましたが、良い結果が得られません。

私のサンプルSQL Fiddleで戦利品を手に入れよう

select case ステートメントを使用する代わりに日付をチェックする方法はありますか?

4

1 に答える 1

1

Cases の注文は作業が必要です。CASEaがtrueの場合、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 に答える