Oracle中的时间戳数据类型查询

时间:2014-05-09 14:41:44

标签: sql oracle date

我有一个名为CYCLING_ACCIDENTS_2的表,其中包含一个名为TIMESTAMP(6)的{​​{1}}列,这是一个如何存储日期的示例ACC_DATE_TIME,我想知道如何我可以只查询这种日期格式的时间,以便我可以拥有所有年份(2005-2012)的时间间隔,但仅限于当天的某些时间。我尝试了很多功能,但到目前为止我所有的功能都是语法错误,我试图在网上搜索,但我可以'看到适合我案件的任何事情。有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

首先,时间戳是一个数字,而不是一个字符串。所以日期默认显示为31-MAY-12 16.45.00.000000,但它实际上是我相信自1970年以来的微秒数。

如果您只想选择时间部分,请使用to_char()

select to_char(acc_date_time, 'hh24:mi') time
,      count(*) occurences
from   cycling_accidents_2
group by to_char(acc_date_time, 'hh24:mi')

编辑:我认为第二个查询实际上回答了您的问题:

select *
from   cycling_accidents_2 ca
where  to_char(ca.acc_date_time, 'hh24:mi') between '10:00' and '18:00'
and    ca.acc_date_time >= to_timestamp('01-01-2005', 'dd-mm-yyyy') 
and    ca.acc_date_time < to_timestamp('01-01-2013', 'dd-mm-yyyy')

答案 1 :(得分:0)

SELECT * FROM CYCLING_ACCIDENTS_2 WHERE
(EXTRACT(YEAR FROM ACC_DATE_TIME) BETWEEN 2005 AND 2012)
AND
(EXTRACT(HOUR FROM ACC_DATE_TIME) BETWEEN 10 AND 18)