我需要选择从昨天下午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