2013-06-20 20 views
5

mia visita tabella è il seguente:Oracle. Come stampare la data e l'ora?

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

quando provo ad interrogare: select * from Visit ottengo:

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; 

Come mai il tempo non c'è?

risposta

5

È inoltre possibile impostare un formato che si applica a tutte le date come questo:

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

In questo modo, la query originale sarebbe uscita le date nel formato che stai cercando, senza utilizzare TO_CHAR. Per impostare di nuovo al consueto formato di default, basta fare questo:

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

Dovrebbe essere HH: MI: SS invece di HH: M: SS? –

+0

Correggi @MaximEliseev, e grazie per avermelo fatto sapere! Quello era un errore di battitura. Ho aggiornato la risposta con la tua correzione. –

8

che è il formato di data oracle impostato come predefinito per l'istanza.

è necessario specificare correttamente il formato per vedere più o meno .. qualcosa di simile:

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

Grazie, quindi non posso usare 'select *', posso ...? Devo elencare tutte le colonne: 'seleziona col1, col2, to_char (...) da visitare' ?? è giusto? – Buras

+0

@Buras: puoi usare 'select *' se emetti 'alter session', come ha mostrato Ed Gibbs. –

2

vi affidate ai conversione data implicita, che sta utilizzando il vostro (sessione-dipendente, ma forse ereditato da impostazione predefinita del DB) NLS_DATE_FORMAT - in questo caso sembra essere DD-MON-RR.

È possibile utilizzare to_char per specificare il formato, ad es .:

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

Il datetime format models are described in the documentation.

In generale, è meglio non fare affidamento su conversioni implcit. Anche se ottieni ciò che ti aspetti ora, possono essere specifici della sessione, quindi un altro utente in un altro client vedrà qualcosa di diverso. Questo può causare guasti oltre a sembrare sbagliato. Specificare sempre data e il numero formati, utilizzando to_date, to_char, to_timestamp ecc

2

Oracle seguire internamente formato 'DD-Mon-YY' per memorizzare nel database. Quindi restituisce'DD-Mon-Y

Se si desidera impostare la data con ore min e sec. puoi modificare NLS_DATE_FORMAT in sessione.

Se si desidera eseguire una query per il solo scopo di Presentation per quell'istanza. Utilizzare la funzione TO_char per convertire nel formato richiesto.

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

Spero che la query precedente ti dia l'output che desideri.

+0

Le date non sono * memorizzate * in DD-Mon-YY o in qualsiasi altro formato leggibile dall'uomo. Oracle utilizza la propria [rappresentazione interna a 7 byte] (http://stackoverflow.com/a/187492/266304) per memorizzare le date. –

Problemi correlati