条件where语句:选择查询日期不同的不同时间段

时间:2014-12-11 10:44:23

标签: sql datetime sql-server-2012 where-clause

我有一个查询需要选择不同的时间段。逻辑是:

  • 如果今天是星期二,请选择星期六00:00:00~星期一23:99;
  • 如果今天是其他工作日,请选择上一个工作日(00:00~23:99)。

以下是我的查询:

Select *
From ...
WHERE 
    (DATENAME(DW,GETDATE())= 'Tuesday'
    AND (<@SalesDate> BETWEEN DATEADD(DAY, -3, GETDATE()) and DATEADD(DAY, -1, GETDATE())))
OR
    (DATENAME(DW,GETDATE())<> 'Tuesday'
    AND (<@SalesDate> BETWEEN DATEADD(DAY, -1, GETDATE())and DATEADD(DAY, -1, GETDATE())))

它没有返回我想要的结果。有人可以帮帮我吗?谢谢。

1 个答案:

答案 0 :(得分:0)

对于date数据类型,

BETWEEN有点挑剔。请参阅此question

GETDATE()将返回今天的时间。你需要剥掉它。

-- Today's date, stripped of time
DECLARE @Today datetime = CONVERT(datetime,CONVERT(date,GETDATE()))

Select *
From ...
WHERE 
    (DATENAME(DW,GETDATE())= 'Tuesday'
    AND (@SalesDate >= DATEADD(DAY, -3, @Today) and @SalesDate < DATEADD(DAY, -1, @Today)))
OR
    (DATENAME(DW,GETDATE())<> 'Tuesday'
    AND (@SalesDate >= DATEADD(DAY, -1, @Today) and @SalesDate < DATEADD(DAY, -1, @Today)))