Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 не понимаю to_date  [new]
octavia
Member

Откуда:
Сообщений: 144
Добрый день!
Не совсем понимаю как работает функция to_date.
SQL> select to_date('10-nov-1999','dd.mm.yy') dat from dual;
dat
-------
10-nov-99

SQL> select to_date('10-nov-1999','dd mm yyyy') dat from dual;
dat
-------
10-nov-99

SQL> select to_date('10-nov-1999') dat from dual;
dat
-------
10-nov-99

Т.е. если функция to_date преобразует строку в дату используя параметр NLS_DATE_FORMAT, то зачем тогда нужна маска форматирования? Запрос выполнялся в SQL Plus. Объясните, пожалуйста :)
23 июн 11, 11:49    [10860171]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
octavia
функция to_date преобразует строку в дату используя параметр NLS_DATE_FORMAT...
... а затем выполняет неявное преобразование DATE->CHAR, ибо на экране отображается таки строка
23 июн 11, 11:52    [10860206]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
AmKad
Member

Откуда:
Сообщений: 5222
octavia,

SQL> select to_date('10-nov-1999', 'dd.mm.yy') dat from dual;
select to_date('10-nov-1999', 'dd.mm.yy') dat from dual
               *
ошибка в строке 1:
ORA-01858: вместо ожидаемой цифры обнаружен нецифровой символ


SQL>
23 июн 11, 11:58    [10860271]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
octavia
Member

Откуда:
Сообщений: 144
AmKad,
SQL> select to_date('10-nov-1999', 'dd.mm.yy', 'NLS_DATE_LANGUAGE=RUSSIAN') dat from dual;
select to_date('10-nov-1999', 'dd.mm.yy','NLS_DATE_LANGUAGE=RUSSIAN') dat from dual
               *
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected

SQL> select to_date('10-nov-1999', 'dd.mm.yy','NLS_DATE_LANGUAGE=AMERICAN') dat from dual;

DAT
---------
10-NOV-99

SQL>
23 июн 11, 12:16    [10860434]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
Alexander Konakov
Member

Откуда:
Сообщений: 1027
AmKad
octavia,

SQL> select to_date('10-nov-1999', 'dd.mm.yy') dat from dual;
select to_date('10-nov-1999', 'dd.mm.yy') dat from dual
               *
ошибка в строке 1:
ORA-01858: вместо ожидаемой цифры обнаружен нецифровой символ

11g - всё работает
23 июн 11, 12:16    [10860442]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
Alexander Konakov
Member

Откуда:
Сообщений: 1027
Alexander Konakov
11g - всё работает

Таки да - NLS_DATE_LANGUAGE у меня AMERICAN
23 июн 11, 12:18    [10860458]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Alexander Konakov
Alexander Konakov
11g - всё работает

Таки да - NLS_DATE_LANGUAGE у меня AMERICAN


вообще, сделали - лучше бы уж не делали..
(имхо) просто хрень. ну а чёжеж тогдажеж вместе с этим
select to_date('10-nov-1999', 'dd.mm.yy','NLS_DATE_LANGUAGE=AMERICAN') dat from dual;
и это
select to_date('10-11-1999' ,'dd-mon-yy','NLS_DATE_LANGUAGE=AMERICAN') dat from dual;
не заткнули, если таки уж взялись сеять квадратно-гнездовым?
дебилы..
23 июн 11, 12:41    [10860692]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
Вот тут есть немного по теме, но в целом бред: Bug 4294605: DATE FORMAT CHANGING IN QA ORA-01858
23 июн 11, 12:52    [10860800]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
Elic
Member

Откуда:
Сообщений: 29990
orawish
не заткнули, если таки уж взялись сеять квадратно-гнездовым?
дебилы..
Парни, срочно RTFM String-to-Date Conversion Rules
23 июн 11, 13:22    [10861157]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
octavia
Member

Откуда:
Сообщений: 144
Вячеслав Любомудров,Elic,
все равно не понимаю на что влияет маска форматирования. Картинка с другого сайта.
Если выполняется неявное преобразование DATE->CHAR при выводе результат на экран, то как тогда проверить разницу, чтобы понять на что маска влияет?
23 июн 11, 13:41    [10861356]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Elic
orawish
не заткнули, если таки уж взялись сеять квадратно-гнездовым?
дебилы..
Парни, срочно RTFM String-to-Date Conversion Rules

понятное дело, что так всё и документировано.
23 июн 11, 13:42    [10861365]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
octavia
Вячеслав Любомудров,Elic,
все равно не понимаю на что влияет маска форматирования.


Elic дал ссылку.

Вкратце: to_date при преобразовании строки в дату благородно пытается распознать данные в строке, которые указаны в несоответствующем формате. Например, когда вместо номера месяца указано его буквенное сокращение (должно быть MM, а в строке MON), или забыли точки между элементами даты.
23 июн 11, 13:47    [10861412]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
octavia
Если выполняется неявное преобразование DATE->CHAR при выводе результат на экран, то как тогда проверить разницу, чтобы понять на что маска влияет?


Преобразовать явно в TO_CHAR или изменить формат по умолчанию, чтобы увидеть то, что интересует.
23 июн 11, 13:50    [10861461]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
octavia
Вячеслав Любомудров,Elic,
все равно не понимаю на что влияет маска форматирования. Картинка с другого сайта.
Если выполняется неявное преобразование DATE->CHAR при выводе результат на экран, то как тогда проверить разницу, чтобы понять на что маска влияет?

в to_date маска влияет на преобразование строки в дату.
т.е.
1) возможно ли преобразование, в принципе
2) какие элементы строки преобразовать в какие разряды даты
У вас - во всех примерах это преобразование проходит успешно.
проблема же у вас возникает позже - когда вы на дату хотите посмотреть. чтобы вам на неё посмотреть, она должна быть
преобразована в строку, ну а вы этим процессом управлять не хотите и, следовательно, получаете эту строку в результате
неявного преобразования, выполняемого клиентом по настройке соответствующего параметра (строковый вид даты по умолчанию) сессии.
23 июн 11, 13:51    [10861471]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
octavia
Member

Откуда:
Сообщений: 144
suPPLer
Вкратце: to_date при преобразовании строки в дату благородно пытается распознать данные в строке, которые указаны в несоответствующем формате. Например, когда вместо номера месяца указано его буквенное сокращение (должно быть MM, а в строке MON), или забыли точки между элементами даты.

Т.е. маска указывает как стоит преобразовать эту строку?

А почему тогда, если NLS_DATE_FORMAT='dd mon yy',
insert into test1 values (to_date('10-nov-99','dd-mon-yyyy'));
строка добавляется в таблицу, если база данных понимает формат 'dd mon yy', а я передаю 'dd-mon-yyyy'. Выполняется ещё какое-то неявное преобразование?
23 июн 11, 13:58    [10861551]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6740
octavia,

Защита от дурака.
Для развития поиграйтесь с масками yyyy и rrrr и двузначным годом от 0 до 99.
23 июн 11, 14:00    [10861570]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
octavia
Member

Откуда:
Сообщений: 144
Всем большое спасибо за разъяснения! Теперь стало понятно!!! Картинка с другого сайта.
23 июн 11, 14:03    [10861616]     Ответить | Цитировать Сообщить модератору
 Re: не понимаю to_date  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
octavia
А почему тогда, если NLS_DATE_FORMAT='dd mon yy',
insert into test1 values (to_date('10-nov-99','dd-mon-yyyy'));
строка добавляется в таблицу


Потому что NLS_DATE_FORMAT тут не при чём. Почитайте выше указанную ссылку.
23 июн 11, 14:11    [10861729]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить