2017-05-29 102 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 
相关问题