2013-05-01 52 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