2008-10-01 23 views

Respuesta

25

Dado que la precisión de DATE es la segunda (y no hay fracciones de segundos), no hay necesidad de TRUNC en absoluto.

El tipo de datos TIMESTAMP permite fracciones de segundos. Si lo convierte en DATE, se eliminarán los segundos fraccionarios, p.

select cast(systimestamp as date) 
    from dual; 
1

para truncar una timestamp a segundos echarlo a una fecha:

CAST(timestamp AS DATE) 

A continuación, realice los TRUNC 's en el artículo:

TRUNC(CAST(timestamp AS DATE), 'YEAR') 
0

Algo del orden de:

select to_char(current_timestamp, 'SS') from dual; 
1

que utiliza función como esta:

FUNCTION trunc_sec(p_ts IN timestamp) 
IS 
    p_res timestamp; 
BEGIN 
    RETURN TO_TIMESTAMP(TO_CHAR(p_ts, 'YYYYMMDDHH24MI'), 'YYYYMMDDHH24MI'); 
END trunc_sec; 
+2

Creo que este es el camino a seguir, ya que, a diferencia de la mayoría de estas respuestas, es independiente de la versión de Oracle. Aunque no es del todo correcto, te has perdido los segundos. Debería ser algo como: to_date (to_char (systimestamp, 'AAAA-MM-DD HH24: MI: SS'), 'AAAA-MM-DD HH24: MI: SS') – delany

3

Lo siento, pero todos mis predecesores parece estar equivocado:

selecto elenco (systimestamp como date) from dual no se trunca sino que se redondea al siguiente segundo.

que utiliza una función: el trabajo

CREATE OR REPLACE FUNCTION TRUNC_TS(TS IN TIMESTAMP) RETURN DATE AS 
BEGIN 
    RETURN TS; 
END; 

SELECT systimestamp, trunc_ts(systimestamp) date_trunc, 
    CAST(systimestamp AS DATE) date_cast FROM dual 

SYSTIMESTAMP      DATE_TRUNC    DATE_CAST 
21.01.10 15:03:34,567350 +01:00 21.01.2010 15:03:34 21.01.2010 15:03:35 
+0

Ejecuté su código, pero no puedo reproduce tus hallazgos. En unas pocas docenas de pruebas (la mayoría de las cuales se verían afectadas por el redondeo), la porción de segundos nunca difirió entre los tres resultados. ¿En qué versión de Oracle estás? (Yo estaba en 11.2). –

+0

Sí, tiene razón. El reparto hace un redondeo – javadeveloper

+1

CAST redondeará antes de la versión 11i y truncará después. Consulte [Conversión de datos implícitos] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements002.htm#i163326) en la documentación HTML de Oracle. – Sulihin

Cuestiones relacionadas