Bonjour à tous,
j'aimerais faire un "decode" ou un "case when" de ceci :
Si [date_debut] > Date du jour - 1 jour à 23:59:59
Alors 0
Sinon [date_fin] - [date_debut] en secondes (sans arrondi)
Fin Si
merci de vos retours
Bonjour à tous,
j'aimerais faire un "decode" ou un "case when" de ceci :
Si [date_debut] > Date du jour - 1 jour à 23:59:59
Alors 0
Sinon [date_fin] - [date_debut] en secondes (sans arrondi)
Fin Si
merci de vos retours
Ben même principe que pour l'autre post...
Pour info la soustraction entre 2 dates donne un résultat en nombre de jour, le 24*60*60 correspond aux heures minutes secondes afin de faire la conversion en seconde.
Le deuxième select correspond à la différence des dates de la 1ere ligne en unix timestamp... même résultat, pas d'arrondi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 SQL> with t as ( 2 select to_date('03/12/2012 14:25:32','dd/mm/yyyy hh24:mi:ss') as date_debut, to_date('04/12/2012 18:14:21','dd/mm/yyyy hh24:mi:ss') as date_fin from dual union all 3 select to_date('01/12/2012 17:11:03','dd/mm/yyyy hh24:mi:ss') as date_debut, to_date('01/12/2012 17:58:17','dd/mm/yyyy hh24:mi:ss') as date_fin from dual union all 4 select to_date('05/12/2012 23:25:32','dd/mm/yyyy hh24:mi:ss') as date_debut, to_date('06/12/2012 18:14:21','dd/mm/yyyy hh24:mi:ss') as date_fin from dual 5 ) 6 SELECT case when date_debut > trunc(sysdate)-1/24/60/60 then 0 else (date_fin-date_debut)*24*60*60 end as result 7 FROM t; RESULT ---------- 100129 2834 0 SQL> select 1354666461 - 1354566332 from dual; 1354666461-1354566332 --------------------- 100129 SQL>
Vous pouvez simplifier :
En :Si [date_debut] > Date du jour - 1 jour à 23:59:59
Et donc en SQL :Si [date_debut] >= Date du jour arrondie au jour
Devient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part case when date_debut > trunc(sysdate)-1/24/60/60 then 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part case when date_debut >= trunc(sysdate) then 0
Partager