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

リテラルが文字列列のOracleSQLto_dateのフォーマット文字列と一致しません

    Oracleがwhere句で見つかった条件を評価する順序は固定されていません。つまり、TO_DATEを含む条件を他の基準の前に評価することを選択できます。その場合、クエリは失敗します。これを防ぐには、ordered_predicatesヒントをクエリに追加しますが、パフォーマンスを向上させるために追加の手動調整が必要になる場合があることに注意してください。

    SELECT /*+ ordered_predicates */
                   To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') somedate 
              FROM properties$aud a, 
                   template_properties$aud b, 
                   consumable_properties$aud c 
             WHERE Lower(a.name) = 'somedate' 
               AND a.id = b.property_id 
               AND b.id = c.template_property_id 
               AND To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') IS NOT NULL
    

    どうやらordered_predicates 10g以降は非推奨です。その場合、あなたの唯一の選択肢は、オプティマイザーが最初にサブクエリを評価するように強制されるような方法でサブクエリを使用することだと思います(つまり、クエリを組み合わせることができません)。これを行う最も簡単な方法は、rownumを配置することです。 内部クエリのwhereステートメント内。

    SELECT To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') somedate 
      FROM (SELECT value 
              FROM properties$aud a, 
                   template_properties$aud b, 
                   consumable_properties$aud c 
             WHERE Lower(a.name) = 'somedate' 
               AND a.id = b.property_id 
               AND b.id = c.template_property_id
               AND rownum > 0) 
     WHERE To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') IS NOT NULL
    


    1. Python:MySQLdbとライブラリがロードされていません:libmysqlclient.16.dylib

    2. MySQLデータベースからSQLのみを使用したファイルへのBlobのエクスポート

    3. asp.netからOracleストアドプロシージャにNull/空の文字列を渡す

    4. pipフリーズはhelp('modules')とは異なるモジュールを提供します