t在两个动态(变量)日期 SQL 之间进行选择



我有一个每天运行一次的查询,我想分享它,但是我需要删除团队中的其他用户必须编辑它的部分。基本上,它在周一至周五运行。我想,如果今天是星期一,给我过去 3 天的数据。其他任何一天,只要给我昨天的数据。

到目前为止,这就是我所拥有的:

更新:它们都是字符串,所以现在我收到以下错误。

"关键字'BETWEEN'附近的语法不正确。

DECLARE @daychecker varchar(max) = FORMAT(GETDATE(), 'dddd')
DECLARE @daterange0 varchar(max)
DECLARE @daterange1 varchar(max) = FORMAT(GETDATE()-3, 'yyyy-MM-dd')
DECLARE @daterange2 varchar(max) = FORMAT(GETDATE()-1, 'yyyy-MM-dd')
IF  @daychecker = 'Wednesday'
BEGIN
SET @daterange0 = BETWEEN @daterange1 AND @daterange2
END
ELSE
BEGIN
SET @daterange0 = FORMAT(GETDATE()-1, 'yyyy-MM-dd')
END
SELECT @daterange0;

今天的结果作为示例应返回昨天的日期。但这行不通。我将考虑所有选项,包括硬编码某种主开始日期,我们可以从年初或其他什么开始计算。

最好定义 2 个日期、开始日期和结束日期,并根据它们过滤查询。编辑:我现在不确定您是否想要过滤数据的实际日期或报告的标签。我修改了我的答案以包括后者,使用您想要的任何内容并忽略另一个......

DECLARE @DateStart DATE 
DECLARE @DateEnd DATE 
DECLARE @LableRange varchar(max)
SELECT DATEPART(WEEKDAY, GETDATE()) --Sun=1, Mon=2, ...
IF DATEPART(WEEKDAY, GETDATE()) = 2 BEGIN
SET @DateStart = DATEADD (DAY, -5,GETDATE())
SET @DateEnd = DATEADD (DAY, -2,GETDATE())
SET @LableRange = CONCAT(FORMAT(@DateStart, 'yyyy-MM-dd'), ', '
, FORMAT(DATEADD(day,1,@DateStart), 'yyyy-MM-dd'), ', '
, FORMAT(DATEADD(day,2,@DateStart), 'yyyy-MM-dd'))
-- or maybe this format is better
--SET @LableRange = CONCAT('BETWEEN '
--, FORMAT(@DateStart, 'yyyy-MM-dd'), ' AND '
--, FORMAT(DATEADD(day,2,@DateStart), 'yyyy-MM-dd'))
END ELSE BEGIN
SET @DateStart = DATEADD (DAY, -1,GETDATE())
SET @DateEnd = GETDATE()
SET @LableRange = FORMAT(@DateStart, 'yyyy-MM-dd')
END
SELECT @LableRange
SELECT * FROM SomeTable as T
WHERE T.TestDate < @DateEnd AND T.TestDate >= @DateStart 

请注意,即使您要过滤的日期是日期时间而不是纯日期,这也有效。

相关内容

  • 没有找到相关文章

最新更新