sql >> Database >  >> RDS >> Oracle

Letterlijk komt niet overeen met formaattekenreeks voor Oracle SQL to_date in een tekenreekskolom

De volgorde waarin Oracle de voorwaarden in de waar-clausule evalueert, staat niet vast. Dat wil zeggen dat het ervoor kan kiezen om de voorwaarde die TO_DATE bevat vóór de andere criteria te evalueren, in welk geval de query zal mislukken. Om dat te voorkomen, voegt u de hint order_predicates toe aan uw zoekopdracht, maar houd er rekening mee dat hiervoor mogelijk extra handmatige afstemming nodig is om de prestaties te verbeteren.

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

Blijkbaar ordered_predicates wordt afgeraden vanaf 10g. In dat geval denk ik dat je enige optie is om een ​​subquery zo te gebruiken dat de optimizer deze eerst moet evalueren (d.w.z. het kan de query's niet combineren). De eenvoudigste manier om dit te doen is door rownum in de waar-instructie van de innerlijke vraag.

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. Postgres-fout bij invoegen - ERROR:ongeldige bytereeks voor codering van UTF8:0x00

  2. Javascript Sorteren van een array-achtige volgorde in Oracle

  3. Oracle Merge vs Select en vervolgens invoegen of bijwerken

  4. Een goede gewoonte om omgekeerde indexen op surrogaatsleutels te gebruiken? (Orakel)