Вопрос:

Oracle. Как вывести дату и время?

oracle date time

33989 просмотра

4 ответа

969 Репутация автора

Моя таблица посещений выглядит следующим образом:

insert into Visit
values(12, to_date('19-JUN-13', 'dd-mon-yy'), to_date('19-JUN-13 12:00 A.M.' , 'dd-mon-yy hh:mi A.M.'));
insert into Visit
values(15, to_date('20-JUN-13', 'dd-mon-yy'), to_date('20-JUN-13 02:00 A.M.' , 'dd-mon-yy hh:mi A.M.'));
insert into Visit
values(18, to_date('21-JUN-13', 'dd-mon-yy'), to_date('21-JUN-13 10:30 A.M.' , 'dd-mon-yy hh:mi A.M.'));

Когда я пытаюсь запросить его: select * from Visitя получаю:

SQL> select * from visit;

   SLOTNUM DATEVISIT ACTUALARRIVALTIME                                                                                                                                                                                                                                                                                                                                                                                 
---------- --------- ------------------------------                                                                                                                                                                                                                                                                                                                                                                     
        12 19-JUN-13 19-JUN-13                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        15 20-JUN-13 20-JUN-13                                                                                                                                                                                                       
        18 21-JUN-13 21-JUN-13                                                                                                                                                                                                      

SQL> spool off;

Почему время не там?

Автор: Buras Источник Размещён: 20.06.2013 08:31

Ответы (4)


11 плюса

15157 Репутация автора

это формат даты оракула, который установлен по умолчанию для вашего экземпляра.

Вы должны правильно указать формат, чтобы увидеть более или менее .. что-то вроде этого:

select to_char( datevisit, 'dd-mon-yy hh24:mi:ss' ) from visit
Автор: Randy Размещён: 20.06.2013 08:32

2 плюса

143988 Репутация автора

Вы полагаетесь на неявное преобразование даты, которое использует вашу (зависящую от сеанса, но, возможно, унаследованную от настройки по умолчанию БД) NLS_DATE_FORMAT- в этом случае, кажется, что DD-MON-RR.

Вы можете использовать to_charдля указания формата, например:

select to_char(actualarrivaltime, 'DD-MON-YYYY HH:M:SS PM') from ..

Модели формата datetime описаны в документации .

В общем, лучше никогда не полагаться на неконтролируемые преобразования. Даже если вы получите то, что ожидаете сейчас, они могут зависеть от сеанса, поэтому другой пользователь в другом клиенте, возможно, увидит что-то другое. Это может привести к сбоям, а также просто выглядеть неправильно. Всегда указывайте формат даты и номера, используя to_date, to_charи to_timestampт. Д.

Автор: Alex Poole Размещён: 20.06.2013 08:35

12 плюса

22741 Репутация автора

Решение

Вы также можете установить формат, который применяется ко всем датам, например так:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH:MI:SS PM';

Таким образом, ваш исходный запрос будет выводить даты в нужном вам формате, без использования TO_CHAR. Чтобы вернуться к обычному формату по умолчанию, просто сделайте это:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';
Автор: Ed Gibbs Размещён: 20.06.2013 08:39

2 плюса

21 Репутация автора

Oracle внутренне следует формату «DD-Mon-YY» для хранения в базе данных. Так что возвращается 'DD-Mon-Y

Если вы хотите, чтобы формат даты с часами мин и сек. Вы можете изменить NLS_DATE_FORMAT в сеансе.

Если вы хотите запросить только презентацию цели для этого экземпляра. Используйте функцию TO_char для преобразования в нужный формат.

SELECT slotnum, TO_CHAR (datevisit, 'DD-MON-YY ') "DATEVISIT",
       TO_CHAR (actualarrivaltime, 'DD-MON-YY HH:MI:SS AM') "ACTUALARRIVALTIME"
  FROM visit

Надеюсь, что приведенный выше запрос даст вам вывод, как вам нравится.

Автор: Bhargav B Размещён: 21.06.2013 11:06
Вопросы из категории :
32x32