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

OracleSQLを使用して特定の範囲の誕生日を持つ従業員を選択する

    Oracleで日付範囲を検索する方法は複数あります。シナリオでは、関係するすべての日付の月と日の要素を数値に変換することをお勧めします。

    select
      p.id as person_id,
       ...
       ...
      where e.active = 1
      and to_number (to_char( e.dateOfBirth, 'MMDD')) 
          between to_number (to_char( FROMDATE, 'MMDD'))
                  and to_number (to_char( TODATE, 'MMDD')) 
      order by extract(month from e.dateOfBirth) DESC,
              extract(day from e.dateOfBirth) DESC
    

    これは、e.dateOfBirthのインデックスを使用しません 桁。それが重要かどうかは、クエリを実行する頻度によって異なります。

    @AdeelAnsariのコメント:

    どんなインデックス? dateOfBirthの通常のインデックス インデックスエントリは年要素で始まるため、は役に立ちません。したがって、 anyで生まれた人々のすべての記録を見つけるのに役立つわけではありません。 12月23日。

    関数ベースのインデックス(または11gでは、インデックス付きの仮想列(基本的に同じもの))は、日付列の一部にインデックスを付ける唯一の方法です。



    1. アレイはjOOQとPostgreSQLで最適化されていますか?

    2. androidのSqliteからのListView

    3. トランザクション内のMysqlトランザクション

    4. データベース接続とクエリコードのヘルプが必要