Sql 如何每年动态更新查询的日期?

Sql 如何每年动态更新查询的日期?,sql,sql-server,Sql,Sql Server,我在SQL语句中有一个where子句,它使用BETHEN函数对两个日期进行硬编码。我希望这些日期更具动态性,每年更新,不需要手动更改。以某种方式使用GetDate函数 我尝试过使用getdate的变体,但它不起作用 我当前的代码如下所示 其中日期介于“2018年1月1日”和2019年1月1日之间 我需要每年在一月份开始的新的一年中更新此信息。尝试以下方法: Where date between (SELECT DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0))

我在SQL语句中有一个where子句,它使用BETHEN函数对两个日期进行硬编码。我希望这些日期更具动态性,每年更新,不需要手动更改。以某种方式使用GetDate函数

我尝试过使用getdate的变体,但它不起作用

我当前的代码如下所示

其中日期介于“2018年1月1日”和2019年1月1日之间

我需要每年在一月份开始的新的一年中更新此信息。

尝试以下方法:

Where date between (SELECT DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)) And
   (DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1))

对于MS SQL Server,您可以将以下数据用于上一年的数据:

    WHERE [DateFieldName]   BETWEEN DATEADD(YYYY, DATEDIFF(YYYY, 0, GETDATE()) -1, 0) 
                            AND DATEADD(YYYY, DATEDIFF(YYYY, 0, GETDATE()),0)

对于MS SQL Server 2012及更高版本,您可以使用DATEFROMPARTS:

DECLARE @StartDate Date = DATEFROMPARTS(YEAR(GETDATE()),1,1)
DECLARE @EndDate Date = DATEFROMPARTS(YEAR(GETDATE())+1,1,1)
然后您的查询变成:

SELECT *
FROM SomeTable
WHERE MyDate >= @StartDate AND MyDate < @EndDate
选择*
从某处
其中MyDate>=@StartDate和MyDate<@EndDate

重复的[Get Current year and next form mysql]()您使用的是哪种产品?“SQL”只是一种查询语言,而不是特定数据库产品的名称,并且日期时间函数非常特定于供应商。请为您正在使用的数据库产品添加一个“
postgresql
oracle
sql server
db2
,…Microsoft sql server我向您道歉,我已经用YEAR(GETDATE())解决了这个问题。CURDATE似乎对我不起作用,谢谢您所回答的所有问题。没有指定dbms的问题的产品特定答案。至少告诉我们这是针对哪个dbms的。除了jarlh写的:中间的
select
完全可用除上述两项之外:您的结束日期将排除当年31日的所有数据