2014-12-26 11 views
5

Ho un campo TIMESTAMP (6) in Oracle e devo rimuovere il componente in millisecondi dal momento.rimozione di millisecondi da un campo tmstmp di oracle

Per esempio io ho

10/20/2014 10:34:06.356000 AM 

e vorrei rimuovere i millisecondi in modo da avere

10/20/2014 10:34:06 AM 

Non si conosce il modo migliore per farlo?

Grazie!

risposta

1

provare questo

SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" 
FROM DUAL; 

se avete bisogno di data formato 12 ore

SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH:MI:SS AM') "NOW" 
FROM DUAL; 

SQL FIDDLE

+0

questo funziona ma ho bisogno di archiviato per essere un timestamp (0). quando eseguo il tuo codice, perdo l'AM/PM e il tempo perde il suo formato GMT. Può essere trasmesso su un timestamp (0)? quindi potrebbe funzionare – user3022875

+0

se è necessario il formato 12 ore con AM/PM, quindi utilizzare la seconda query – HaveNoDisplayName

+0

ma questo è ancora un CHAR. Ho bisogno di timestamp (0). è possibile? – user3022875

3

ne dici di questo?

select cast(col as timestamp(0)) 

EDIT:

Il modo più semplice per evitare arrotondamenti è quello di utilizzare trunc() o sottrarre mezzo secondo:

select cast(col - 0.5/(24*60*60) as timestamp(0)) 
+0

funziona ma fa l'arrotondamento. C'è un modo per renderlo non rotondo e basta rimuovere i millisecondi senza arrotondare in su o in giù? – user3022875

-2

Questo potrebbe aiutare!

select substr(to_char('10/20/2014 10:34:06.356000 AM'),1,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1)||' '|| 
substr(to_char('10/20/2014 10:34:06.356000 AM'),-2,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1) "Date" 
from dual; 
0

È possibile sia il cast ad una data con nessun frazioni di secondo (questo giro al secondo più vicino):

CAST(your_timestamp AS TIMESTAMP(0)) 

O per un tipo di dati DATE (questo troncherà al secondo più vicino):

CAST(your_timestamp AS DATE) 

Se si desidera come tipo di dati poi gettato indietro:

CAST(CAST(your_timestamp AS DATE) AS TIMESTAMP(0)) 

Oppure si può convertirlo in una stringa formattata e specificare il modello di formato che si desidera utilizzare (questo troncherà al secondo più vicino):

TO_CHAR(your_timestamp, 'YYYY-MM-DD HH24:MI:SS') 

Ti piace questa:

SQL Fiddle

Setup

Oracle 11g R2 schema:

CREATE TABLE your_table (your_timestamp) AS 
    SELECT TIMESTAMP '2017-10-25 12:53:12.10076' FROM DUAL; 

Query 1:

SELECT CAST(your_timestamp AS TIMESTAMP(0)) AS "Timestamp", 
     CAST(your_timestamp AS DATE) AS "Date", 
     TO_CHAR(your_timestamp, 'DD-MM-YYYY HH24:MI:SS') AS "String" 
FROM your_table 

Results:

|    Timestamp |     Date |    String | 
|-----------------------|----------------------|---------------------| 
| 2017-10-25 12:53:12.0 | 2017-10-25T12:53:12Z | 25-10-2017 12:53:12 | 

nota: Come il TIMESTAMP e DATE sono formattati in uscita dipenderà dalla vostra NLS_TIMESTAMP_FORMAT e NLS_DATE_FORMAT parametri di sessione, ma si può direttamente controlla la formattazione di TO_CHAR quando si specifica un modello di formato.