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

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

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;

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

Ответы на вопрос(4)

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

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

select to_char( datevisit, 'dd-mon-yy hh24:mi:ss' ) from visit
 Buras20 июн. 2013 г., 22:39
Спасибо, тогда я не могу использоватьselect * , могу я...? Я должен перечислить все столбцы:select col1, col2, to_char(...) from visit ?? это правильно?
 Alex Poole20 июн. 2013 г., 22:41
@Buras - вы можете использоватьselect * если вы выдаетеalter sessionкак показал Эд Гиббс.
Решение Вопроса

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

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

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

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR';
 Maxim Eliseev24 апр. 2017 г., 18:35
Должно ли это быть ЧЧ: МИ: СС вместо ЧЧ: М: СС?
 Ed Gibbs24 апр. 2017 г., 20:57
Исправьте @MaximEliseev, и спасибо, что сообщили мне! Это была опечатка. Я'Мы обновили ответ с вашим исправлением.

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

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

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

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

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

Oracle внутренне следуетDD-ПН-YY» формат для хранения в базе данных. Так что возвращаетсяDD-ПН-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

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

 Alex Poole01 июн. 2016 г., 16:00
Даты нехранится в DD-Mon-YY или любом другом удобочитаемом формате. Oracle использует свой собственный7-байтовое внутреннее представление хранить даты.

Ваш ответ на вопрос