2017-05-29 143 views
0

我需要選擇從昨天下午6:59到今天下午7:00的所有數據。兩個日期和時間之間的SQL選擇

要選擇的數據是datetime字段。 日期不是恆定的,因爲我將每天使用此查詢生成日期。

我正在使用MS SQL Server 2008.下面是一個示例測試數據。

Sample DateTimeField Data

你能不能給我一個想法我應該如何去做到這一點

SELECT transaction 
FROM test_tbl 
WHERE ... 
+0

您可以使用'BETWEEN'或'Operators',如'>,=,<'。請試試看。[日期時間](https://stackoverflow.com/questions/13869640/filter-by-dates-in-sql) – Joby

+0

是否要在6:59 PM和7:00 PM之間選擇所有數據?或者您是否希望從昨天下午6:59和晚上7:00選擇所有數據,然後使用此數據(鍵?)選擇相應的行。 –

+0

@RafalZiolkowski日期不是恆定的,因爲我打算每天都用這個查詢生成它 – Grinex

回答

3

您可以使用包含日期列如果你的專欄是transactionDatTim,那麼查詢如下:

DECLARE @tempDate DATE -- note that this date and not DateTime 
DECLARE @tempStartDateTime DATETIME, @tempEndDateTime DATETIME 
SET @tempDate = GETDATE() 
SET @tempEndDateTime = DATEADD(hh,19,CAST(@tempDate AS datetime)) 
SET @tempStartDateTime = DATEADD(mi,-1,DATEADD(d,-1,@tempEndDateTime)) 


--the query 
SELECT transaction 
FROM test_tbl 
WHERE transactionDatTim BETWEEN @tempStartDateTime AND @tempEndDateTime 

較短的版本W/O臨時變量將是

--the query 
SELECT transaction 
FROM test_tbl 
WHERE transactionDatTim BETWEEN 
    DATEADD(mi,-((24-19)*60+1),CAST(CAST(GETDATE() AS DATE) AS datetime)) 
    AND 
    DATEADD(hh,19,CAST(CAST(GETDATE() AS DATE) AS datetime)) 
+0

我相信這是正確的,但我不知道爲什麼沒有輸出時,我將它應用到我的查詢。再試一次,會給你更新。謝謝你的幫助。 – Grinex

0

你可以試試這個,看看

select transaction from test_tb1 where transaction between '2017-05-02 18:59:00' and '2017-05-03 19:00:00'; 
+0

這實際上是我之前做的,但事情是,日期不是恆定的 – Grinex

0

你可以使用條款 「之間的」 發現躺在兩個結束日期之間的記錄(含):

TRY:

SELECT transaction 
FROM test_tbl 

where datetime between 
cast(convert(varchar, DATEADD(dd,-1, GETDATE()), 101)+' 6:59 PM' as datetime) --to get yesterday's date and time at 6:59 *hardcoded* 
and 
cast(convert(varchar, getdate(), 101)+' 7:00 PM' as datetime) --to get current date at 7pm 
相關問題