在昨天下午3点到今天下午3点的sql server之间获取记录

时间:2016-09-29 05:28:34

标签: sql sql-server datetime where clause

我有一个带有datetime列的表,我使用select语句提取记录,我不确定' where'部分我只想要记录从昨天下午3点到今天下午3点的sql server。请帮忙。

3 个答案:

答案 0 :(得分:1)

您可以使用GETDATE()获取今天,GETDATE() - 1获取昨天的日期。 然后你可以删除时间部分并添加15个小时,即两个日期的下午3点。

SELECT * FROM tableName
WHERE dateColumn BETWEEN DATEADD(hh,15,DATEADD(dd,DATEDIFF(dd,0,GETDATE()-1),0))
AND DATEADD(hh,15,DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0))

答案 1 :(得分:0)

DATEADD(D,-1,GETDATE()):给你上次约会

DATEADD(HOUR,.....):将增加15小时(需要下午3:00,所以增加15小时)

SELECT
    *
FROM TableName E
WHERE 
E.BirthDate>=DATEADD(HOUR,15, CAST(CAST(DATEADD(D,-1,GETDATE()) AS Date) AS datetime))
AND E.BirthDate<=DATEADD(HOUR,15, CAST(CAST(GETDATE() AS Date) AS datetime))

答案 2 :(得分:0)

如果要指定日期和时间,则必须在ISO 8601 standard

中指定日期时间文字

SQLServer 2000以后版本支持ISO 8601。

日期时间的ISO 8601标准是:YYYY-MM-DDThh:mm:ss.nnn[Z]

CREATE TABLE #testingTime(a int, timeofinsert datetime)
INSERT INTO #testingTime
values (1, '2016-09-28T17:05:00'),
(2,'2016-09-29T14:05:00'),
(3,'2016-09-29T18:05:00')

SELECT * FROM #testingTime WHERE timeofinsert 
> '2016-09-28T15:00:00' AND timeofinsert < ='2016-09-29T15:00:00'

针对您昨天和今天下午3点的具体问题。您可以使用以下代码:

CREATE TABLE #testingTime(a int, timeofinsert datetime)
INSERT INTO #testingTime
values (1, '2016-09-27T17:05:00'),
(2,'2016-09-28T14:05:00'),
(3,'2016-09-28T18:05:00')


DECLARE @yesterday3PM datetime = convert(varchar(10),convert(date,getdate()-1)) + 'T15:00:00'
DECLARE @today3PM datetime = convert(varchar(10),convert(date,getdate())) + 'T15:00:00'

select @yesterday3PM, @today3PM
SELECT * FROM #testingTime WHERE timeofinsert 
> @yesterday3PM AND timeofinsert < = @today3PM