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