2013-05-01 50 views
1

我在SQL Server中有一个包含一些数据以及datetime列的表。在SQL Server中在20:00和05:00之间获取数据

我想在20:00和05:00时钟之间取数据。

我有以下查询,但不能得到succedeed

select 
    txt_target_cell_id, count(*) as 'Total Count', txt_longitude, txt_latitude 
from 
    tbl_cdr_analyzer_load 
where 
    DATEPART(hour, dat_start) between 20 and 05 
group by 
    txt_target_cell_id, txt_longitude, txt_latitude 
+0

你想从*所有的* 20:00日期24:00和00:00〜04数据:00或从20:00至24:00的*特定*日期和*第二天* 00:00至04:00的数据? – Corak 2013-05-01 05:25:51

+0

从所有的日期.. – 2013-05-01 05:26:34

+0

好的,然后斯塔斯答案应该为你工作。 – Corak 2013-05-01 05:28:40

回答

4

BETWEEN声明表示:

DATEPART(hour, dat_start) >= 20 AND DATEPART(hour, dat_start)<=04 

这始终是假的。

你可以尝试做这样的:

select 
    txt_target_cell_id,count(*) as 'Total Count',txt_longitude,txt_latitude 
from 
    tbl_cdr_analyzer_load 
where 
    DATEPART(hour, dat_start) <= 04 OR DATEPART(hour, dat_start)>=20 
group by 
    txt_target_cell_id,txt_longitude,txt_latitude 
+0

难道你不认为必须有'AND'opertor而不是'OR' – 2013-05-01 05:38:53

+0

不,因为如果它的AND,那么查询将在04到20之间,就像你在 – Stasel 2013-05-01 05:48:14

+0

之前尝试的那样,这不会在'DATEPART小时,dat_start)<= 20或DATEPART(小时,dat_start)> = 23'。这里0到23小时之间的数据将出来 – 2013-05-31 11:56:22

1
select 
    txt_target_cell_id, count(*) as 'Total Count', txt_longitude, txt_latitude 
from 
    tbl_cdr_analyzer_load 
where 
    DATEPART(hour, dat_start) between 04 and 20 //Change here 
group by 
    txt_target_cell_id, txt_longitude, txt_latitude 

,因为valu1和值2之间的ID相当于。 其中id> =值和id = < values2 得到渴望的结果,,,,

Select 
    txt_target_cell_id,count(*) as 'Total Count',txt_longitude,txt_latitude 
from 
    tbl_cdr_analyzer_load 
where 
    DATEPART(hour, dat_start) <= 04 OR DATEPART(hour, dat_start)>=20 
group by 
    txt_target_cell_id,txt_longitude,txt_latitude 
+0

如果我在4和20之间做的话,它不会给我4'o时间早上到8点钟之间的结果。我想在8'o时钟之间,直到4'o时间早上。 – 2013-05-01 05:22:01

+0

我认为他的意思是相反的:第二天20到04之间的日期(即夜间活动) – Stasel 2013-05-01 05:23:06

+0

我告诉过你之间,为什么你没有得到resuklt获得结果使用@Stasel查询 – 2013-05-01 05:25:33