WHERE date_field OPERATOR Month/Day/(可变年份)
WHERE date_field OPERATOR Month/Day/(Variable Year)
我正在尝试为每年的续订季节提取大于或等于 10 月 1 日(可变年)的发票。我每年都可以对此进行硬编码,但我不想这样做,因为 SQL 代码嵌入在 CMS (netFORUM Enterprise) 的子形式中,并且 运行 通过另一个应用程序和太多的部分跟不上了。
因此,从 2016 年开始的硬代码将如下所示:
WHERE my_date_field >= '10/01/2016'
注意,从 2016 年 10 月开始到 2017 年 2017 年的几个月,我会 运行 使用此代码查询几次。 请记住,一些两年前 (10/1/2015) 的旧发票可能仍存在于他们的帐户中,我不想出现在我的结果中。
我琢磨了几种方法,都不太明白。
提前致谢!
WHERE my_date_field BETWEEN
CONVERT(DATETIME, CONVERT(VARCHAR, YEAR(GETDATE()) - 1) + '-10-01')
AND CONVERT(DATETIME, CONVERT(VARCHAR, YEAR(GETDATE())) + '-09-30')
或 SQL Server 2012 及更高版本:
WHERE my_date_field BETWEEN
DATEFROMPARTS(YEAR(GETDATE()) - 1, 10, 01)
AND DATEFROMPARTS (YEAR(GETDATE()), 09, 30)
并且正如 HABO 所建议的,如果 my_date_field 包含时间,则不要使用 BETWEEN,而是使用 >= 和 <,例如:
WHERE my_date_field >= DATEFROMPARTS(YEAR(GETDATE()) - 1, 10, 01)
AND my_date_field < DATEFROMPARTS (YEAR(GETDATE()), 10, 01)
您可以拆分日、月、年,然后将年份替换为当前年份。
SELECT my_date_field WHERE my_date_field >= CAST(
CAST(DAY(my_date_field) AS NVARCHAR(2)) + '/' +
CAST(MONTH(my_date_field) AS NVARCHAR(2)) + '/' +
CAST(YEAR(GETDATE())) AS DATE)
或者您可以简单地将年份部分替换为当前年份。
SELECT my_date_field WHERE my_date_field >=
REPLACE(my_date_field, YEAR(my_date_field), YEAR(GETDATE()))
我正在尝试为每年的续订季节提取大于或等于 10 月 1 日(可变年)的发票。我每年都可以对此进行硬编码,但我不想这样做,因为 SQL 代码嵌入在 CMS (netFORUM Enterprise) 的子形式中,并且 运行 通过另一个应用程序和太多的部分跟不上了。
因此,从 2016 年开始的硬代码将如下所示:
WHERE my_date_field >= '10/01/2016'
注意,从 2016 年 10 月开始到 2017 年 2017 年的几个月,我会 运行 使用此代码查询几次。 请记住,一些两年前 (10/1/2015) 的旧发票可能仍存在于他们的帐户中,我不想出现在我的结果中。
我琢磨了几种方法,都不太明白。
提前致谢!
WHERE my_date_field BETWEEN
CONVERT(DATETIME, CONVERT(VARCHAR, YEAR(GETDATE()) - 1) + '-10-01')
AND CONVERT(DATETIME, CONVERT(VARCHAR, YEAR(GETDATE())) + '-09-30')
或 SQL Server 2012 及更高版本:
WHERE my_date_field BETWEEN
DATEFROMPARTS(YEAR(GETDATE()) - 1, 10, 01)
AND DATEFROMPARTS (YEAR(GETDATE()), 09, 30)
并且正如 HABO 所建议的,如果 my_date_field 包含时间,则不要使用 BETWEEN,而是使用 >= 和 <,例如:
WHERE my_date_field >= DATEFROMPARTS(YEAR(GETDATE()) - 1, 10, 01)
AND my_date_field < DATEFROMPARTS (YEAR(GETDATE()), 10, 01)
您可以拆分日、月、年,然后将年份替换为当前年份。
SELECT my_date_field WHERE my_date_field >= CAST(
CAST(DAY(my_date_field) AS NVARCHAR(2)) + '/' +
CAST(MONTH(my_date_field) AS NVARCHAR(2)) + '/' +
CAST(YEAR(GETDATE())) AS DATE)
或者您可以简单地将年份部分替换为当前年份。
SELECT my_date_field WHERE my_date_field >=
REPLACE(my_date_field, YEAR(my_date_field), YEAR(GETDATE()))