2016-11-17 22 views
0

SQL文を検索:SQLは、今後の日付と時刻

SELECT * FROM table 
WHERE eventdate >= DATE(NOW()) 
AND eventtime > TIME(NOW()) 
ORDER BY eventdate ASC, eventtime ASC; 

目標は次回来ているイベントを選択することです。同じ日付に2つのイベントがない限り、正常に動作します。たとえば、

Event 1, 11/17/2016 7:00am 
Event 2, 11/17/2016 2:00pm 
Event 3, 11/18/2016 9:00am 

17日午前7時に渡されたイベント2を選択します。上記のでしょうまだselectイベントこれは動作するはず1.

+3

使用していないデータベースにはこのタグを付けないでください。私はそれらのタグを削除しました。 *使用している*データベースのタグのみを追加してください。 –

+0

あなたが探しているものを理解しているか分かりませんが、LIMIT 2を追加することができます。 – FDavidov

+0

イベント1は既に発生しているので、選択したくありません。しかし、上記のステートメントはそれを選択しています。 –

答えて

0

このコメントは、データベースが存在するサーバーで現在使用されているタイムゾーンに基づいています。このため、あなたはPHPmyAdminを使用していますが、私はあなたがサーバーのタイムゾーンを変更する権限を持っていないと信じています。

あなたの可能な解決策は以下のとおりです。MST(UTC-07)に既に存在するか、サーバーが現在のデータを使用し、2時間またはconvert the data to a time zone を引く

  • 上にあるものは何でも時間帯

    • 使用データ
    • NOW()+ 2時間を使用するようにクエリを書き直してください。
  • +0

    「サーバーのタイムゾーンを変更する(または変更できる人を見つける)」を削除することをお勧めします。これは、同じタイムゾーンにない他のユーザーに問題を移すだけです。これは、ほとんどの場合、ローカルの日付/時刻ではなく、データベースにUTCの日付/時刻を格納するのが理にかなっています。誰も現在のUTC時間に同意します... – user1429080

    +0

    注目と更新。私は、これが私の前提ではないはずの個人的なプロジェクトであったという印象の下で答えていました。 – Fritz

    1

    声明:

    SELECT * FROM table 
    WHERE eventdate > DATE(NOW()) 
    OR 
        (eventdate = DATE(NOW()) AND eventtime > TIME(NOW())) 
    
    ORDER BY eventdate ASC, eventtime ASC; 
    

    は、基本的には、日付が未来(明日)であるか、日付が今日と時間であれば渡される比較します。

    あなたの日付が将来の場合は、この場合の時間は気にしません。

    はそれを試してみてください。

    +0

    問題は、NOW()が2時間遅れているように見えます。どのようにESTに時間を変更する上で任意のアイデア? –

    +0

    ここに答えがあります:http://stackoverflow.com/questions/13916747/set-mysql-database-timezone-to-gmt – user2693928

    0

    例の文脈でtableeventdateeventtimefieldsという値が格納されている必要があります。 time > TIME(NOW())をチェックしている場合、時間が経過するとこのイベントを選択しないでください。

    +0

    ここにテーブルのスナップショットがあります:http://i.imgur.com/ulvwRin。 png –

    +0

    イベントが午前7時になると、最初のtimeが8:06に設定されています。コードが7:00から8:06の間に実行されている場合は、その日の最初のイベントも同様に実行されます。 SQL文がサーバ時に実行される関数であるNOW()関数を使用しているため、タイムゾーンは問題にはならないようです。サーバーの正確な時刻と、イベントの場所とサーバーの時刻との間に時間差があるかどうかは、実際に異なります。 –