0

毎日の行事の開館時間に関する情報を保持するデータベースがあります。

通常、データベースには機能 ID と営業時間しかありませんが、ここでは例として機能名を示します。

Table: opening_times
| function_id |   function_name  |  day_open  |  day_close |  eve_open  |  eve_close |
|-------------|------------------|------------|------------|------------|------------|
|    1        | Charity Function | 1357027200 | 1357056000 | 1357063200 | 1357081200 |

関数が次のものを持っているかどうかを確認する SQL ステートメントを書きたいと思います。

  • 日中はまだ開いていません
  • 昼営業
  • 昼休み
  • イブニングオープン
  • 定休日

これは明らかに、現在の時刻 [スタンプ] を、データベースに保存した 2 つの日付範囲と比較する必要があります。

誰かがこれを達成するのを手伝ってくれませんか。構文ができたら、学習します。

標準の IF ステートメントを実行して、これが1つの時間範囲内にあるかどうかを確認できますが、これでは明らかに必要な結果が得られません。

ありがとう!

4

2 に答える 2

0

これを試して::

SELECT 

CASE IF UNIX_TIMESTAMP() BETWEEN ot.`day_open` AND ot.`day_close`

THEN  'Within daytime open range'
ELSE 'Not in daytime open range' END as open_status
FROM opening_times ot
于 2013-10-02T15:23:48.530 に答える
0
SELECT 
    CASE
        WHEN UNIX_TIMESTAMP( ) < ot.`day_open`
            THEN 'Function has not started'
        WHEN UNIX_TIMESTAMP() BETWEEN ot.`day_open` AND ot.`day_close`
            THEN 'function open'
        WHEN UNIX_TIMESTAMP() BETWEEN ot.`day_close` AND ot.`eve_open`
            THEN 'Mid-Day Break'        
        WHEN UNIX_TIMESTAMP() BETWEEN ot.`eve_open` AND ot.`eve_close`
            THEN 'Evening Open'
        WHEN UNIX_TIMESTAMP() > ot.`eve_close`
            THEN 'Closed for day'
END AS function_open_status
FROM opening_times ot WHERE ot.function_id=1
于 2013-10-02T16:54:50.163 に答える