Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 И снова форматы даты..  [new]
самбади
Guest
день добрый!
Ставится простая задача преобразовать строку в дату формата 'dd.mm.yyyy hh24:mi:ss' внутри тела процедуры.

База тестовая, 11.2.0.2.0, nls_date_format = 'DD-MON-RR'.

select TO_DATE('01.03.2013 12:30:25', 'dd.mm.yyyy hh24:mi:ss') from dual;

результат: 01.03.2013 12:30:25

declare 
 d date;
 begin
   select TO_DATE('01.03.2013 12:30:25', 'dd.mm.yyyy hh24:mi:ss') into d from dual;
   dbms_output.put_line(d);                                                   
 end;

результат: 01-MAR-13

Почему по разному интерпретируется вроде бы одно и то же преобразование и можно ли это обойти, не затрагивая nls_date_format?
8 май 13, 10:39    [14271892]     Ответить | Цитировать Сообщить модератору
 Re: И снова форматы даты..  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
самбади,

разуй глаза. то что ты видишь не есть то что храниться в базе. Это ДАТА, поэтому перед просмотром - преобразуй в varchar2
8 май 13, 10:47    [14271971]     Ответить | Цитировать Сообщить модератору
 Re: И снова форматы даты..  [new]
самбади
Guest
Vint
преобразуй в varchar2

для просмотра да, но цель есть получить дату в нужном формате и сравнить ее с другой датой (не указал сразу), а получается что на входе строка:
'01.03.2013 12:30:25'
а после преобразования дата:
 '01-MAR-13'
И как в этом случае узнать что эта дата входит, например, в промежуток дат '01.03.2013 12:25:00' и '01.03.2013 12:40:25' ?
8 май 13, 11:01    [14272091]     Ответить | Цитировать Сообщить модератору
 Re: И снова форматы даты..  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
самбади
Vint
преобразуй в varchar2

для просмотра да, но цель есть получить дату в нужном формате и сравнить ее с другой датой (не указал сразу), а получается что на входе строка:
'01.03.2013 12:30:25'
а после преобразования дата:
 '01-MAR-13'
И как в этом случае узнать что эта дата входит, например, в промежуток дат '01.03.2013 12:25:00' и '01.03.2013 12:40:25' ?
select dt
  from (select TO_DATE('01.03.2013 12:30:25', 'dd.mm.yyyy hh24:mi:ss') dt
          from dual) t
 where t.dt between TO_DATE('01.03.2013 12:25:00', 'dd.mm.yyyy hh24:mi:ss') and
                    TO_DATE('01.03.2013 12:40:25', 'dd.mm.yyyy hh24:mi:ss');
8 май 13, 11:09    [14272135]     Ответить | Цитировать Сообщить модератору
 Re: И снова форматы даты..  [new]
123йй
Member

Откуда:
Сообщений: 1639
самбади,
автор
цель есть получить дату в нужном формате и сравнить ее с другой датой

ну и сравнивай даты а не строки
8 май 13, 11:09    [14272140]     Ответить | Цитировать Сообщить модератору
 Re: И снова форматы даты..  [new]
antonweb
Member

Откуда:
Сообщений: 262
самбади
день добрый!
Ставится простая задача преобразовать строку в дату формата 'dd.mm.yyyy hh24:mi:ss' внутри тела процедуры.

База тестовая, 11.2.0.2.0, nls_date_format = 'DD-MON-RR'.

select TO_DATE('01.03.2013 12:30:25', 'dd.mm.yyyy hh24:mi:ss') from dual;

результат: 01.03.2013 12:30:25

declare 
 d date;
 begin
   select TO_DATE('01.03.2013 12:30:25', 'dd.mm.yyyy hh24:mi:ss') into d from dual;
   dbms_output.put_line(d);                                                   
 end;

результат: 01-MAR-13

Почему по разному интерпретируется вроде бы одно и то же преобразование и можно ли это обойти, не затрагивая nls_date_format?



Вот так:
declare 
 d date;
 begin
   select TO_DATE('01.03.2013 12:30:25', 'dd.mm.yyyy hh24:mi:ss') into d from dual;
   dbms_output.put_line(to_char(d,'dd.mm.yyyy hh24:mi:ss'));                                                   
 end;
8 май 13, 11:11    [14272170]     Ответить | Цитировать Сообщить модератору
 Re: И снова форматы даты..  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
самбади
день добрый!
Ставится простая задача преобразовать строку в дату формата 'dd.mm.yyyy hh24:mi:ss' внутри тела процедуры.

База тестовая, 11.2.0.2.0, nls_date_format = 'DD-MON-RR'.

select TO_DATE('01.03.2013 12:30:25', 'dd.mm.yyyy hh24:mi:ss') from dual;


результат: 01.03.2013 12:30:25

declare 
 d date;
 begin
   select TO_DATE('01.03.2013 12:30:25', 'dd.mm.yyyy hh24:mi:ss') into d from dual;
   dbms_output.put_line(d);                                                   
 end;


результат: 01-MAR-13

Почему по разному интерпретируется вроде бы одно и то же преобразование и можно ли это обойти, не затрагивая nls_date_format?
Здесь не одно преобразование, а три. Одно явное и два неявных. Чтобы обойти неявные преобразования, надо заменить их явными.
8 май 13, 11:13    [14272177]     Ответить | Цитировать Сообщить модератору
 Re: И снова форматы даты..  [new]
самбади
Guest
Vint
самбади,
то что ты видишь не есть то что храниться в базе

все таки первый пинок самый действенный, сам себя сбивал с толку выводя на экран пургу, впредь буду внимательней..
спасибо! с наступающим всех!
8 май 13, 11:23    [14272268]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить