sql >> Database >  >> RDS >> Oracle

Kan niet begrijpen hoe waarde impliciet wordt geconverteerd naar datumnotatie

De String-to-Date-conversieregels aanvullende opmaakregels toestaan ​​(zonder dat andere modificaties worden toegepast). Dus:

  • MM komt ook overeen met MON en MONTH;
  • MON komt overeen met MONTH (en vice versa);
  • RR komt overeen met RRRR; en
  • De interpunctie is optioneel.

Dus:

SELECT TO_DATE( '10AUGUST2016', 'DD-MM-RR'    ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUGUST2016', 'DD-MON-RR'   ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUGUST2016', 'DD-MONTH-RR' ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016',    'DD-MM-RR'    ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016',    'DD-MON-RR'   ) FROM DUAL UNION ALL
SELECT TO_DATE( '10AUG2016',    'DD-MONTH-RR' ) FROM DUAL;

Alle genereren de datum 2016-08-10T00:00:00 .

U kunt dit voorkomen door de FX formaatmodel

Dan:

SELECT TO_DATE( '10-AUGUST-2016', 'FXDD-MM-RR'    ) FROM DUAL;

Geeft:ORA-01858: a non-numeric character was found where a numeric was expected en zou alleen overeenkomen waar een exacte patroonovereenkomst wordt gevonden (hoewel RR komt nog steeds overeen met RRRR ).

Ja, Oracle gebruikt impliciet TO_DATE( '10AUGUST2016', NLS_DATE_FORMAT ) om de conversie uit te voeren.

Als u gebruikt:

ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR';

Dan zal je insert mislukken.




  1. hoe dood ik op een elegante manier het verouderde serverproces postgres?

  2. Wat is het langst mogelijke wereldwijde telefoonnummer dat ik zou moeten overwegen in SQL varchar(lengte) voor telefoon?

  3. primaire en externe sleutelrelatie maken

  4. Gegevens importeren van Excel naar MySql met Node JS