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

クエリ間のOracle日付

    出力から判断すると、START_DATEをタイムスタンプとして定義したように見えます。それが通常の日付である場合、Oracleは暗黙の変換を処理できます。ただし、これらの文字列を日付として明示的にキャストする必要はありません。

    SQL> alter session set nls_date_format = 'dd-mon-yyyy hh24:mi:ss'
      2  /
    
    Session altered.
    
    SQL>
    SQL> select * from t23
      2  where start_date between '15-JAN-10' and '17-JAN-10'
      3  /
    
    no rows selected
    
    SQL> select * from t23
      2  where start_date between to_date('15-JAN-10') and to_date('17-JAN-10')
      3  /
    
    WIDGET                          START_DATE
    ------------------------------  ----------------------
    Small Widget                    15-JAN-10 04.25.32.000    
    
    SQL> 
    

    しかし、それでも1行しか取得できません。これは、START_DATEに時間要素があるためです。時間コンポーネントを指定しない場合、Oracleはデフォルトで深夜に設定します。 fromには問題ありません BETWEENの側面 ただし、までは対象外です サイド:

    SQL> select * from t23
      2  where start_date between to_date('15-JAN-10') 
      3                       and to_date('17-JAN-10 23:59:59')
      4  /
    
    WIDGET                          START_DATE
    ------------------------------  ----------------------
    Small Widget                    15-JAN-10 04.25.32.000
    Product 1                       17-JAN-10 04.31.32.000
    
    SQL>
    

    編集

    時間コンポーネントを渡すことができない場合は、いくつかの選択肢があります。 1つは、WHERE句を変更して、基準から時間要素を削除することです。

    where trunc(start_date) between to_date('15-JAN-10') 
                                and to_date('17-JAN-10')
    

    これは、START_DATEのbツリーインデックスを失格にするため、パフォーマンスに影響を与える可能性があります。代わりに、関数ベースのインデックスを作成する必要があります。

    または、コードの日付に時間要素を追加することもできます:

    where start_date between to_date('15-JAN-10') 
                         and to_date('17-JAN-10') + (86399/86400) 
    

    これらの問題のために、多くの人はbetweenの使用を避けることを好みます 次のように日付の境界を確認します:

    where start_date >= to_date('15-JAN-10') 
    and start_date < to_date('18-JAN-10')
    


    1. mysqlは、数字がコンマ区切りのリストにあるかどうかを確認します

    2. 特定のスキーマにテーブルが存在するかどうかを確認する方法

    3. 最短時間で1,000万件のレコードを挿入するにはどうすればよいですか?

    4. INSERT INTO ... FROM SELECT ...RETURNINGidマッピング