在sql的日期范围中选择动态日期

在sql的日期范围中选择动态日期,sql,datetime,where-clause,date-arithmetic,Sql,Datetime,Where Clause,Date Arithmetic,这是我的查询的日期范围: WHERE date BETWEEN 20190101 AND [here date should come as last year YTD -1] 例如,如果我们今天使用这个查询(20201106)(格式:yyyymmdd),那么第二个日期应该是20191105 为了更清楚:当我今天运行此查询时(20201106),我的查询应该从日期范围获取结果: WHERE date BETWEEN 20190101 AND 20191105 WHERE

这是我的查询的日期范围:

WHERE 
    date BETWEEN 20190101 AND [here date should come as last year YTD -1]
例如,如果我们今天使用这个查询(20201106)(格式:yyyymmdd),那么第二个日期应该是
20191105

为了更清楚:当我今天运行此查询时(20201106),我的查询应该从日期范围获取结果:

WHERE 
    date BETWEEN 20190101 AND 20191105
WHERE 
    date BETWEEN 20190101 AND 20191106
当我明天运行此查询时(20201107),我的查询应该从日期范围中获取结果:

WHERE 
    date BETWEEN 20190101 AND 20191105
WHERE 
    date BETWEEN 20190101 AND 20191106
我该怎么做

有人能帮忙吗?

您可以使用
dateadd()
getdate()

或者其他可以获取当前数据库时间的函数,但这应该可以工作。 另外,请记住使用
convert()
将日期格式修改为所需格式。

您可以使用
dateadd()
getdate()

WHERE 
DATEADD(YEAR,-1, GETDATE()) -- One Day Before Today in the Last Year
AND 
DATEADD(yy, DATEDIFF(yy, 0, DATEADD(YEAR,-1, GETDATE())), 0) AS StartOfYear -- The Day 1 of the Last Year
或者其他可以获取当前数据库时间的函数,但这应该可以工作。
另外,请记住使用
convert()
将日期格式修改为您想要的格式。

我将其表述为:

WHERE 
DATEADD(YEAR,-1, GETDATE()) -- One Day Before Today in the Last Year
AND 
DATEADD(yy, DATEDIFF(yy, 0, DATEADD(YEAR,-1, GETDATE())), 0) AS StartOfYear -- The Day 1 of the Last Year
where date >= datefromparts(year(getdate()) - 1, 1, 1)
  and date <  dateadd(year, -1, convert(date, getdate()))
where date>=datefromparts(年份(getdate())-1,1,1)
和日期<日期添加(年份,-1,转换(日期,getdate())
此过滤器从去年年初和1年零1天前开始过滤

注意,我将过滤策略更改为使用半开间隔,而不是在之间使用
。这在某种程度上更加灵活,因为它可以正确处理日期中的时间组件(如果有),并简化偏移逻辑


还请注意,
getdate()
有一个时间组件,需要在偏移时删除该组件以实现逻辑。

我将其表述为:

where date >= datefromparts(year(getdate()) - 1, 1, 1)
  and date <  dateadd(year, -1, convert(date, getdate()))
where date>=datefromparts(年份(getdate())-1,1,1)
和日期<日期添加(年份,-1,转换(日期,getdate())
此过滤器从去年年初和1年零1天前开始过滤

注意,我将过滤策略更改为使用半开间隔,而不是在
之间使用
。这在某种程度上更加灵活,因为它可以正确处理日期中的时间组件(如果有),并简化偏移逻辑


还要注意,
getdate()
有一个时间组件,需要在偏移时删除该组件以实现逻辑。

请添加数据库平台的标记,因为每个DBMS中的日期函数不同。一般来说,您应该查找数据库管理系统的日期函数参考,并找到合适的函数来使用。请添加数据库平台的标记,因为每个数据库管理系统中的日期函数不同。通常,您应该查找DBMS的日期函数引用,并找到一个合适的函数来使用。