2014-05-09 37 views
0

我有一个名为CYCLING_ACCIDENTS_2的表,其中包含一个名为ACC_DATE_TIMETIMESTAMP(6)列,这是一个如何存储日期的示例31-MAY-12 16.45.00.000000,我想知道如何只查询这样的日期格式,以便我可以在所有年份(2005-2012)都有一段时间间隔,但只限于当天的特定时间。我尝试了很多功能,但到目前为止我所有的都是语法错误,我试图在网络上搜索,但我看不到任何适合我的情况。谁能帮忙?Oracle中的时间戳数据类型查询

谢谢!

回答

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') 
+0

它的工作谢谢 – user3523583

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)