sql >> データベース >  >> RDS >> Oracle

デュアルテーブルからのSQLの日付と時刻の比較

    さて、私はあなたを持っていると思います。次のことをしたいですか?

    select <columns>
      from my_table
     where state_date <= <some date>
       and state_time <= <some time>
    

    ミリ秒を気にするのはかなり珍しいことですが、気にする場合は systimestampを使用する必要があります 。

    日付と時刻を分割しているという事実から判断すると、これらは文字なので、フォーマットマスク 。それらが間違っている場合、リンクは何をすべきかについてあなたを案内するはずです。ちなみに、このように日付を分割するのは賢明ではありません。 タイムスタンプを使用して列を作成できます テーブルのデータ型。これにより、問題が非常に単純になります。

    だから、なぜあなたが'Day'を選んだのか分かりません クエリの形式ですが、その to_char(sysdate、'DAY')になります 。

    以下のコメントから to_char(sysdate、'DD-MON-YY')になります

    <しばらく> to_char(systimestamp、'HH24:MI:SS:FF3')になります 、これにより、タイムスタンプがミリ秒になりますが、データ型はマイクロ秒になる可能性があります。

    私には少し奇妙に思えますが、クエリは次のようになります。

    select <columns>
      from my_table
     where state_date <= to_char(sysdate, 'DD-MON-YY')
       and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')
    

    日付を文字列として保存する場合は、 yyyymmddの形式で保存するのがより一般的です。 少なくとも、それが正常であることを保証できます。このようなことをした場合は、フォーマットマスクを変更するだけです。そうしないと、これらのクエリは意図したとおりに機能しません。

    個人的には、持っている この方法でデータを保存し、 state_dateを想定します たとえば、 dd-mon-yyとして保存されます 、つまり、年、月、日、 state_timeを含みます 上記のように保存されている場合は、次のようにします。

    select <columns>
      from my_table
     where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
            <= systimestamp
    

    これにより、何が起こっているのかがより明確になり、<に曖昧さがなくなります。 つまり、この状況では、日付は常に将来の日付よりも短くなりますが、これは必ずしも文字列に当てはまるとは限りません。

    これが理にかなっていることを願っています。




    1. Mysql-1045-ユーザー'user'@'localhost'のアクセスが拒否されました(パスワードを使用:はい)

    2. MySql DBにデータを挿入し、挿入が成功したか失敗したかを表示します

    3. 高度なSQLクエリデザインヘルプ(2つのテーブル間で複製、複数のフィールド、1つのフィールドに基づいて除外される可能性があります)

    4. macportsからのMysqlエラー:mysqld.sockがありません