我需要選擇從昨天下午6:59到今天下午7:00的所有數據。兩個日期和時間之間的SQL選擇
要選擇的數據是datetime
字段。 日期不是恆定的,因爲我將每天使用此查詢生成日期。
我正在使用MS SQL Server 2008.下面是一個示例測試數據。
你能不能給我一個想法我應該如何去做到這一點
SELECT transaction
FROM test_tbl
WHERE ...
我需要選擇從昨天下午6:59到今天下午7:00的所有數據。兩個日期和時間之間的SQL選擇
要選擇的數據是datetime
字段。 日期不是恆定的,因爲我將每天使用此查詢生成日期。
我正在使用MS SQL Server 2008.下面是一個示例測試數據。
你能不能給我一個想法我應該如何去做到這一點
SELECT transaction
FROM test_tbl
WHERE ...
您可以使用包含日期列如果你的專欄是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))
我相信這是正確的,但我不知道爲什麼沒有輸出時,我將它應用到我的查詢。再試一次,會給你更新。謝謝你的幫助。 – Grinex
你可以試試這個,看看
select transaction from test_tb1 where transaction between '2017-05-02 18:59:00' and '2017-05-03 19:00:00';
這實際上是我之前做的,但事情是,日期不是恆定的 – Grinex
你可以使用條款 「之間的」 發現躺在兩個結束日期之間的記錄(含):
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
您可以使用'BETWEEN'或'Operators',如'>,=,<'。請試試看。[日期時間](https://stackoverflow.com/questions/13869640/filter-by-dates-in-sql) – Joby
是否要在6:59 PM和7:00 PM之間選擇所有數據?或者您是否希望從昨天下午6:59和晚上7:00選擇所有數據,然後使用此數據(鍵?)選擇相應的行。 –
@RafalZiolkowski日期不是恆定的,因爲我打算每天都用這個查詢生成它 – Grinex