sql >> Databáze >  >> RDS >> Oracle

problém s funkcí to_date se sysdate

Chci vysvětlit, proč získáváte různé výsledky.

Viz tento sqlfiddle

Jak již bylo řečeno, sysdate je vnímáno jako DATE zadejte a provádíte implicitní konverzi, když

select to_date(sysdate, format) from dual;

protože první parametr to_date by měl být typ varchar, který systém dělá:

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

protože váš implicitní formát data je 'DD-MON-YY' , váš dotaz přejde do:

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;

druhý to_date, protože yyyy je plný tisíciletý formát, jde do '01-JAN-0013', což je 13AD a pravděpodobně je NEDĚLE :)



  1. Postgresql Aktuální časové razítko při aktualizaci

  2. Co je omezení primárního klíče v databázi SQL Server - SQL Server / Výukový program T-SQL, část 54

  3. Případ Cardinality Odhad Red Herring

  4. Je COUNT(rowid) rychlejší než COUNT(*)?