5

MySQL を使用して時間チェックを行い、現在の時間が 2 つのタイムスタンプの間にあるかどうかを確認しようとしています。

私がやろうとしているのは、設定された通知範囲が指定された 2 つのタイムスタンプの間にある場合に、通知リストを生成することです。

したがって、誰かが '18:00:01' と '07:59:59' の間の TXT メッセージで通知してくれと言ったら、'18:00:01' と '07:59:59' の間のメールで通知してください。

これが私がやったことです。

だから私は次のことを試しました(現在の時刻が17:00:00であると仮定します)

SELECT CURTIME() BETWEEN '08:00:00' AND '18:00:00' //this retured 1 which is correct

ただし、次のことを試した場合(現在の時刻が19:00:00であると仮定)

SELECT CURTIME() BETWEEN '18:00:01' AND '07:59:59'  //this return 0

これは私の現在のクエリです

 SELECT DISTINCT
TRIM(su.first_name) AS name,
CASE WHEN n.notification_method = "SMS" THEN 
CASE WHEN cc.gateway IS NOT NULL THEN CONCAT(su.phone_cell, cc.gateway) ELSE "" END
ELSE su.email1 END AS address
FROM  ticketing_system_notifications AS n
INNER JOIN(
SELECT DISTINCT created_by, issue_id FROM ticketing_system_discussions
WHERE status = 1
) AS ds ON n.notify = ds.created_by
INNER JOIN users AS su ON su.user_id = n.notify
LEFT JOIN cell_phone_carriers AS cc ON cc.carrier_id = su.carrier_id
WHERE ds.issue_id = 31 AND n.notify <> 12 AND n.notification_type = "REPLY"
AND n.category_id = 0 AND n.status = 1 AND (n.expired_on IS NULL OR n.expired_on > NOW() ) 

AND (  (n.start IS NULL OR n.end IS NULL) OR (  

CASE WHEN n.start <= n.end THEN
CURTIME() BETWEEN n.start AND n.end
ELSE
CURTIME() >= n.start AND CURTIME() <= n.end
END   )  ) 

これは私が間違っているところです

CASE WHEN n.start <= n.end THEN
CURTIME() BETWEEN n.start AND n.end
ELSE
CURTIME() >= n.start AND CURTIME() <= n.end
END   )

誰かが時間を正しくキャプチャするためのロジックを構築するのを手伝ってくれますか? フィールドstartとフィールドの両方endTIME

私のticketing_system_notificationsテーブルには、次の 2 つ のレコードがあり
ますstartend
startend

4

1 に答える 1

10

時間範囲が午前 0 時を超える場合は、代わりに次のロジックを使用する必要があります。

 curtime() >= n.start OR curtime() <= n.end

考えてみてください。現在の時刻は、「開始」と真夜中の間、または真夜中と「終了」の間でなければなりません。

于 2013-05-31T19:47:34.510 に答える