2008-10-01 6 views

Répondre

25

Depuis la précision de DATE est à la seconde (et aucune fraction de secondes), il n'y a pas besoin de TRUNC du tout.

Le type de données TIMESTAMP permet des fractions de secondes. Si vous le convertissez en DATE, les secondes fractionnaires seront supprimées - par ex.

select cast(systimestamp as date) 
    from dual; 
1

tronquer un timestamp à quelques secondes vous pouvez le jeter à une date:

CAST(timestamp AS DATE) 

Pour ensuite effectuer les TRUNC « s dans l'article:

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

Quelque chose de l'ordre de:

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

J'utilise la fonction comme ceci:

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

Je pense que c'est la voie à suivre, puisque, contrairement à la plupart de ces réponses, il est indépendant de la version d'Oracle. Ce n'est pas tout à fait correct, cependant - vous avez manqué les secondes. Devrait être quelque chose comme: to_date (to_char (systimestamp, 'AAAA-MM-JJ HH24: MI: SS'), 'AAAA-MM-JJ HH24: MI: SS') – delany

3

Je suis désolé, mais tous mes prédécesseurs semblent se tromper:

select cast (systimestamp as date) de dual ne tronque pas mais arrondit à la seconde suivante.

J'utilise une fonction:

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

J'ai couru votre code, mais ne peut pas reproduisez vos résultats. Dans quelques dizaines de tests (dont la plupart auraient été affectés par l'arrondissement), la portion des secondes n'a jamais différé entre les trois résultats. Quelle version d'Oracle êtes-vous? (J'étais sur 11.2). –

+0

Oui, vous avez raison .. Cast fait un arrondi – javadeveloper

+1

CAST arrondira avant la version 11i et tronquera après. Voir [Conversion implicite de données] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements002.htm#i163326) dans la documentation Oracle HTML. – Sulihin