0
votes

Sélectionnez une période de temps avec TO_Date ()

J'essaie de sélectionner une période spécifique (jour et heures), afin de faire en moyenne des secondes que les gens passent à la surveillance d'un canal spécifique.

J'ai essayé cette fonction spécifique: (to_date) P >

select  cust_id, ini_datetime,end_datetime, avg(qtd_seconds) as Avg_Sec, Channel

from crm.tmp_4

where   ini_datetime between ( to_date(2019-11-30 17:50:00.0, 'YYYY-MM-DD HH24:MI:SS.FF') and 
to_date(2019-11-30 18:00:00.0,'YYYY-MM-DD HH24:MI:SS.FF') ) 
    and end_datetime between ( to_date(2019-11-30 19:40:00.0,'YYYY-MM-DD HH24:MI:SS.FF') and to_date(2019-11-30 19:50:00.0,'YYYY-MM-DD HH24:MI:SS.FF') ) 

group by cust_id,ini_datetime,end_datetime, Channel


1 commentaires

Les chaînes littérales en SQL doivent être entourées de guillemets simples.


3 Réponses :


1
votes

La valeur doit être jointe à des guillemets, de sorte que votre requête doit être comme ceci: xxx

type de données date ne prend pas en charge les secondes fractionnées. Si vous avez besoin d'eux, utilisez to_timettamp au lieu de to_date .


3 commentaires

Ok, j'ai changé la clause Where à: Où ini_datetime in (to_timettamp ('2019-11-30 17: 50: 00.0', 'aaaa-mm-dd HH24: MI: Ss.ff'), to_timettamp ('2019-11 -30 18: 00: 00.0 ',' AAAA-MM-DD HH24: MI: SS.FFF ')) et End_DateTime In (to_Timetamp (' 2019-11-30 19: 40: 00.0 ',' aaaa-mm-mm-dd HH24: MI: Ss.ff '), TO_TIMESTAMSAM (' 2019-11-30 19: 50: 00.0 ',' AAAA-MM-DD HH24: MI: SS.FFF ')) Groupe par SA, INI_DATETIME, END_DATÉTIME; Avec l'horodatage parce que j'ai besoin des fractions.Mais maintenant, la sortie est "Line 3:26 Fonction non valide" TO_TIMESTAMP '". Est-ce parce que ma date est "2019-11-30" et non "30-Nov-19"?


A littéral standard comme horodatage '2019-11-30 17:50:00' serait beaucoup moins à taper.


@Mary, je supposerais une simple faute de frappe. Peut-être une citation ou un support manquant.



0
votes

Vous êtes si proche. TO_Date La fonction prend une chaîne et le renvoie à ce jour. Vous n'en passez pas de chaîne, mais certains personnages qui n'ont aucun sens à Oracle.

Aussi vous devez supprimer la parenthèse au entre et millisecondes ( .0 et < code> .ff ) car ils ne sont pas valides dans to_date . xxx


0 commentaires

0
votes

Vous pouvez utiliser Littéraux de l'horodatage Pour que cela soit beaucoup plus simple et plus facile à lire:

select cust_id, ini_datetime, end_datetime, channel
     , avg(qtd_seconds) as avg_sec
from   crm.tmp_4
where  ini_datetime between timestamp '2019-11-30 17:50:00' and timestamp '2019-11-30 18:00:00'
and    end_datetime between timestamp '2019-11-30 19:40:00' and timestamp '2019-11-30 19:50:00'
group  by cust_id, ini_datetime, end_datetime, channel


0 commentaires