CAST(当前时间:CURRENT_TIMESTAMP)

时间:2019-01-24 23:22:32

标签: sql oracle

我正在尝试使用时间戳并处理其中的数据,以便可以测量数据库中的不同内容。

当前,我有一列包含“ DATE”的列,但实际上包含整个图章“ DD / MM / YYYY HH24:MI:SS”

我希望能够获取“ 09:00”到“ 09:15”之间“ DTIME”的所有条目,但是无法正确投射它。

如果我不进行任何转换就输出该列,它将看起来像这样

  SELECT ia.DTIME3
  FROM ISIS_AUDIT ia
  WHERE ia.DTIME3 like to_date('24/01/2019', 'DD/MM/YYYY');

输出:24 / JAN / 19

如果我要将其转换为_char,

  SELECT to_char(ia.DTIME3, 'DD/MM/YYYY HH24:MI:SS')
  FROM ISIS_AUDIT ia
  WHERE ia.DTIME3 like to_date('24/01/2019', 'DD/MM/YYYY');

输出:24/01/2019 07:10:52

我希望能够使用此DTIME3并在时间之间找到条目,但CAST和CONVERT to TIME无效。

这是我的工作选项,但是它仍然输出日期,我不想指定日期,以便可以在一周的任何一天运行。

  WHERE ia.DTIME3 between to_date('24/01/2019 09:00:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('24/01/2019 09:15:00', 'DD/MM/YYYY HH24:MI:SS');

输出:24/01/2019 09:00:01

3 个答案:

答案 0 :(得分:3)

  

当前,我有一列包含“ DATE”的列,但实际上包含整个图章“ DD / MM / YYYY HH24:MI:SS”

这就是Oracle DATE datatype的作用:存储日期和时间(不包括小数秒,属于TIMESTAMP数据类型)。 Oracle中没有仅用于日期(没有时间)的特定格式。

要过滤一天中的时间,可以使用the TO_CHAR() function将日期转换为代表其时间的字符串,并且可以进行比较:

TO_CHAR(ia.DTIME3, 'hh24:mi') BETWEEN '09:00' AND '09:14'

您还可以将日期CAST设置为时间戳记,并使用the EXTRACT() function

EXTRACT(HOUR FROM CAST(ia.DTIME3 AS TIMESTAMP)) = 9 
AND EXTRACT(MINUTE FROM CAST(ia.DTIME3 AS TIMESTAMP)) < 15

答案 1 :(得分:1)

Oracle具有DATETIMESTAMP数据类型;都具有年,月,日,时,分,秒的组成部分(TIMESTAMP也具有小数秒)。 Oracle没有TIME数据类型。

相反,使用TRUNC()将时间分量截断为午夜并添加间隔文字:

SELECT *
FROM   ISIS_AUDIT
WHERE  DTIME BETWEEN TRUNC( DTIME ) + INTERVAL '09:00' HOUR TO MINUTE
             AND     TRUNC( DTIME ) + INTERVAL '09:15' HOUR TO MINUTE;

答案 2 :(得分:0)

and ia.DTIME1 not between to_date('&&S_DATE 08:50:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('&&S_DATE 09:20:00', 'DD/MM/YYYY HH24:MI:SS')               
                and ia.DTIME1 not between to_date('&&S_DATE 11:50:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('&&S_DATE 12:40:00', 'DD/MM/YYYY HH24:MI:SS') 
                and ia.DTIME3 not between to_date('&&S_DATE 08:50:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('&&S_DATE 09:20:00', 'DD/MM/YYYY HH24:MI:SS')               
                and ia.DTIME3 not between to_date('&&S_DATE 11:50:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('&&S_DATE 12:40:00', 'DD/MM/YYYY HH24:MI:SS')

我正在尝试这样做,但是我注意到如果我的开始时间为08:30,结束时间为09:30,那么它介于09:00和09:15之间,因此我想将其从表。当前使用的WHERE子句非常具体,只有在时间戳包含指定值的情况下才会排除。

它真的想读取“ DTIME1到DTIME3不在09:00和09:15之间”