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

ORA-01847月の日は1から月の最終日までである必要があります-ただし、データは問題ありません

    これは、whereを使用したクエリです。 条項:

    select value1, to_date(value1,'DD.MM.YYYY') 
    from variableindex 
    where value1 is not null and
          value1 <> '0' and
          creation_time_ > to_timestamp('20140307', 'YYYYMMDD') and
          to_date(value1 'DD.MM.YYYY') < to_date('20140301', 'YYYYMMDD')
    order by 2;
    

    Oracleは、whereの句の処理順序を保証しません。 。したがって、value <> '0' 最後の条件の前に実行されることは保証されていません。これは、SQLServerではたまたま大きな問題です。 1つの解決策は、caseを使用することです。 ステートメント:

    select value1,to_date(value1, 'DD.MM.YYYY') 
    from variableindex 
    where value1 is not null and
          value1 <> '0' and
          creation_time_ > to_timestamp('20140307', 'YYYYMMDD') and
          (case when value <> '0' then to_date(value1, 'DD.MM.YYYY') end) <
              to_date('20140301', 'YYYYMMDD')
    order by 2;
    

    かなり醜いですが、それで問題が解決するかもしれません。



    1. MySQLからストレスを取り除くためにPHPでキャッシュする

    2. SQLServerテーブルの列に非ヌル制約を作成する方法-SQLServer/T-SQLチュートリアルパート51

    3. Spring Data JPA + Hibernate Skip Locked rows(PostgreSQL)

    4. 名前配列にないMySQL?