2013-06-20 21 views
5

Moja wizyta tabeli jest następująca:Oracle. Jak wydrukować datę i godzinę?

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.')); 

Kiedy próbuję go zapytać: select * from Visit uzyskać:

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; 

Jak przyjdzie czas, prawda?

Odpowiedz

5

Można także ustawić format, który ma zastosowanie do wszystkich terminach tak:

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

ten sposób oryginalna kwerenda będzie wyjście daty w formacie, w którym się znajdujesz, bez używania TO_CHAR. Aby ustawić z powrotem do zwykłej domyślnego formatu, po prostu to zrobić:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR'; 
+1

Czy powinien to być HH: MI: SS zamiast HH: M: SS? –

+0

Prawidłowe @MaximEliseev, i dzięki za poinformowanie mnie! To był literówka. Zaktualizowałem odpowiedź, wprowadzając poprawkę. –

8

to format daty wyroczni ustawiony jako domyślny dla instancji.

należy prawidłowo określić format, aby zobaczyć więcej lub mniej .. coś takiego:

select to_char(datevisit, 'dd-mon-yy hh24:mi:ss') from visit 
+0

Dzięki, to nie mogę użyć opcji "wybierz *", czy mogę ...? Mam listę wszystkich kolumn: 'wybierz col1, col2, to_char (...) z wizyty' ?? czy to prawda? – Buras

+0

@Buras - możesz użyć 'select *' jeśli wydasz 'alter session', jak pokazał Ed Gibbs. –

2

pan powołując się na niejawny dnia zamiany, które korzysta z Twojego (session-zależna, ale może odziedziczony domyślne ustawienie DB) NLS_DATE_FORMAT ustawienie - w tym przypadku wydaje się być DD-MON-RR.

to_char można użyć do określenia formatu, np .:

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

datetime format models are described in the documentation.

Ogólnie lepiej jest nigdy nie polegać na implikowanych konwersjach. Nawet jeśli otrzymasz to, czego oczekujesz teraz, mogą one być specyficzne dla sesji, więc inny użytkownik w innym kliencie, może zobaczyć coś innego. Może to spowodować awarie, a także wyglądać źle. Zawsze podać datę i numer formatów, używając to_date, to_char, to_timestamp itp

2

Oracle wewnętrznie śledzić formacie 'DD-MON-yy' do przechowywania w bazie danych. Więc zwraca 'DD-Mon-Y

Jeśli chcesz sformatować datę za pomocą godzin min i sek. możesz zmienić NLS_DATE_FORMAT w sesji.

Jeśli chcesz zapytać o cel Just prezentacji dla tej instancji. Użyj funkcji TO_char, aby przekonwertować na wymagany format.

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

Mam nadzieję, że powyższe zapytanie daje wynik, jak chcesz.

+0

Daty nie są zapisywane * w formacie DD-Mon-YY ani w żadnym innym formacie czytelnym dla człowieka. Oracle używa własnej [7-bajtowej wewnętrznej reprezentacji] (http://stackoverflow.com/a/187492/266304) do przechowywania dat. –

Powiązane problemy