to_date(to_date...

beaddy
Дата: 11.11.2008 19:33:39
А почему

select to_date(to_date('01.01.2999')) from dual

равно 01.01.1999 ?
Elic
Дата: 11.11.2008 19:42:24
Долго расказывать почему.
Проще один раз защемить пальцы дверью, чтобы
  • Никогда не использовалось приведение строки к дате без указания формата
  • Никогда не приходил в голову такой дебилизм, как попытка конвертации даты в дату через промежуточное неявное nls-зависимое преобразование в строку
  • orawish
    Дата: 11.11.2008 19:42:54
    по вашему NLS_DATE_FORMAT-у
    DD.MM.RRRR
    Elic
    Дата: 11.11.2008 19:45:49
    orawish
    DD.MM.RRRR
    Думай ещё :)
    A.K.
    Дата: 11.11.2008 20:38:15
    Потому что по сути это неявный
    select to_date(to_char(to_date('01.01.2999'), 'dd.mm.yy')) from dual
    где dd.mm.yy - это краткий формат даты по умолчанию для вашего NLS
    A.K.
    Дата: 11.11.2008 20:42:03
    Или, скорее, 'DD.MM.RR' - суть в данном случае не изменится.
    так штоле?
    Дата: 11.11.2008 20:45:49
    SQL> alter session set NLS_DATE_FORMAT = 'dd.mm.rr';
    
    Session altered
    
    SQL> select to_date(to_date('01.01.2999')) from dual;
    
    TO_DATE(TO_DATE('01.01.2999'))
    ------------------------------
    01.01.1999
    
    SQL> alter session set NLS_DATE_FORMAT = 'dd.mm.rrrr';
    
    Session altered
    
    SQL> select to_date(to_date('01.01.2999')) from dual;
    
    TO_DATE(TO_DATE('01.01.2999'))
    ------------------------------
    01.01.2999