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

OracleSQLの日付との比較

    問題は2つあります。まず、日付にはほぼ確実に時間要素があります。 to_date('06-MAR-11','DD-MON-YY') 2011/03/06 00:00:00と同等です 。 TRUNC()を使用する場合 その日のすべてを見ることができる関数:

    select * 
      from test_table
     where trunc(creation_date) = to_date('06-MAR-11','DD-MON-YY');
    

    私は MON日時形式モデルを使用します。ここで説明するように、それはあなたの地域と設定に依存します。代わりに、数値の月形式モデルを使用する方が安全です。同様に、常に年の一部として世紀を指定します。

    where trunc(creation_date) = to_date('06-03-YY11','DD-MM-YYYY');
    

    2番目の問題は、ほぼ間違いなくNLS_DATE_FORMATです。時間が考慮されていないように見えるため、4つの同じ日付が表示されます。これは、データが表示される方法のみを管理します。 保存方法ではありません。

    次のようなものを使用してこれを変更できます:

    ALTER SESSION SET NLS_DATE_FORMAT = "DD/MM/YYYY HH24:MI:SS"
    

    以下を使用してテスト環境をセットアップした場合:

    create table test_table ( creation_date date );
    insert into test_table values ( sysdate );
    insert into test_table values ( sysdate - 0.01 );
    alter session set nls_date_format = "YYYY/MM/DD";
    

    返されるデータに時間が含まれていないことがわかります(SYSDATEには含まれていますが):

    SQL> select * from test_table;
    
    CREATION_D
    ----------
    2013/04/12
    2013/04/12
    

    NLS_DATE_FORMATを変更し、同じSELECTを実行すると、時間コンポーネントが得られます。

    SQL> alter session set nls_date_format = "YYYY/MM/DD HH24:MI:SS";
    
    Session altered.
    
    SQL> select * from test_table;
    
    CREATION_DATE
    -------------------
    2013/04/12 12:48:41
    2013/04/12 12:34:17
    

    最後に、今日の日付だけを選択しようとすると、行は返されません:

    SQL> select *
      2    from test_table
      3   where creation_date = to_date('20130412','yyyymmdd');
    
    no rows selected
    

    ただし、TRUNC()を使用する場合 フィールドの日付部分のみを比較するには、すべての行を再度取得します。

    SQL> select *
      2    from test_table
      3   where trunc(creation_date) = to_date('20130412','yyyymmdd');
    
    CREATION_DATE
    -------------------
    2013/04/12 12:48:41
    2013/04/12 12:34:17
    

    2番目の質問に実際に答えるために、一意の日付が必要な場合は、TRUNC()を再利用できます。 機能:

    select distinct trunc(creation_date)
      from test_table
    


    1. MySQLの長時間実行クエリの処理

    2. 安全な方法でSQLインジェクション攻撃を防ぐ方法

    3. グループ化された集約プッシュダウン

    4. Oracleテーブル変更モニター