TSQL日期条件

时间:2012-03-09 17:45:50

标签: sql tsql select

我有一个事件表,不断更新,有一个日期时间列。

我希望今天开始的所有活动以及第二天开始的8小时活动。

这个想法是人们不会在半夜检查事件,所以我们在前一天列出它们。

为了得到今天,我做DATEDIFF(day,eventdate,GETDATE())=0但我没有想出如何为我的案件做the dateadd()。我要么没有行也没有太多。

所以想要的结果是:

From 00:00 on March 9 to 8:00 on March 10.(仅限示例)

5 个答案:

答案 0 :(得分:7)

最好对您的列进行任何计算。改为计算间隔并获取间隔中的行。这样,您可以在eventdate上使用索引,而不是进行表扫描。

select SomeColumns
from YourTable
where eventdate >= dateadd(day, datediff(day, 0, getdate()), 0) and
      eventdate < dateadd(hour, 32, dateadd(day, datediff(day, 0, getdate()), 0))  

答案 1 :(得分:1)

您可以使用这些来约束您的查询......

DECLARE @Start DateTime = CONVERT(nvarchar(10), GetDate(), 121)
DECLARE @End DateTime = DATEADD(Hour, +32, @Start)

这是一个测试脚本

CREATE TABLE #Temp (Column1 DateTime)

INSERT INTO #Temp (column1) values (getdate()) -- it's 6pm now
INSERT INTO #Temp (column1) values (dateadd(hour, -24, getdate())) --6pm yesterday - outside window
INSERT INTO #Temp (column1) values (dateadd(hour, -12, getdate())) --6am today
INSERT INTO #Temp (column1) values (dateadd(hour, -5, getdate())) -- 1pm today
INSERT INTO #Temp (column1) values (dateadd(hour, +12, getdate())) -- 6am tomorrow - inside window
INSERT INTO #Temp (column1) values (dateadd(hour, +17, getdate())) -- 11am tomorrow - outside window

select * from #Temp

DECLARE @Start DateTime = CONVERT(nvarchar(10), GetDate(), 121)
DECLARE @End DateTime = DateAdd(Hour, +32, @Start)

SELECT * FROM #Temp WHERE Column1 > @Start AND Column1 < @End

答案 2 :(得分:1)

SELECT
    Column1, Column2
FROM
    TableName
WHERE
    DateColumm BETWEEN Convert(Date, GETDATE()) AND DateAdd(hh, 32, Convert(smalldatetime, Convert(Date, GETDATE())))

答案 3 :(得分:1)

你也可以这样做:

select *
from yourtable
WHERE EventDate >= Convert(varchar(10), getdate(), 101)
AND EventDate < CAST(Convert(varchar(10), DateAdd(d, 1, getdate()), 101) +  ' 08:00 AM' as datetime)

然后,如果您的EventDate有时间,那么您可以在WHERE子句的第一部分转换EventDate

select *
from yourtable
WHERE Convert(varchar(10), EventDate, 101) >= Convert(varchar(10), getdate(), 101)
AND EventDate < CAST(Convert(varchar(10), DateAdd(d, 1, getdate()), 101) +  ' 08:00 AM' as datetime)

答案 4 :(得分:1)

你可以尝试这样的事情。

DateAdd文档页面显示了您可以使用的所有不同日期部分(小时,天,秒等)

DECLARE @StartTimeWindow DATETIME, @EndTimeWindow DATETIME
SET @StartTimeWindow = DATEDIFF(DAY, 0, GETDATE())
SET @EndTimeWindow = DATEADD(HOUR, 32, @StartTimeWindow)

SELECT *
FROM EventTable
WHERE EventDate >= @StartTimeWindow
  AND EventDate <= @EndTimeWindow