sql >> Database >  >> RDS >> Oracle

probleem met to_date functie met sysdate

Ik wil uitleggen waarom je verschillende resultaten krijgt.

Zie deze sqlfiddle

Zoals al gezegd, wordt sysdate gezien als DATE type en u voert een impliciete conversie uit wanneer

select to_date(sysdate, format) from dual;

omdat de eerste parameter van to_date het varchar-type moet zijn, doet het systeem:

select to_date(to_char(sysdate), format) from dual;

omdat uw impliciete datumnotatie 'DD-MON-YY' . is , uw vraag gaat over:

SELECT TO_CHAR(to_date('01-JAN-13', 'DD-MON-yy'), 'DAY'),
  TO_CHAR(to_date('01-JAN-13', 'DD-MON-yyyy'), 'DAY'),
  TO_CHAR(to_date('01-JAN-13', 'DD-MON-rr'), 'DAY'),
  TO_CHAR(to_date('01-JAN-13', 'DD-MON-rrrr'), 'DAY')
FROM dual;

de tweede to_date, omdat yyyy is een volledig formaat van duizenden jaren, gaat naar '01-JAN-0013' wat 13AD is en waarschijnlijk ZONDAG is :)



  1. SQL - Maak een weergave van meerdere tabellen

  2. Java JDBC Toegang geweigerd voor gebruiker

  3. Onjuist geheel getal (2147483647) is ingevoegd in MySQL?

  4. Hoe kan ik dezelfde query uitvoeren op alle databases op een instantie?