我想在一年内选择一个数据。但是我需要在一年前后的一天选择一个数据。
例如:
如果我选择年份2014
,那么结果应该从31/Dec/2013
开始直到01/Jan/2015
。
SELECT DATEPART(YEAR, myDate) = '2014' FROM MyTable
我的参数仅为“年份”。
有谁知道如何做到这一点?
谢谢。
答案 0 :(得分:2)
你在找这样的东西吗?
DECLARE @inputYear INT = 2014;
DECLARE @StartDate DATE = DATEFROMPARTS(@inputYear -1,12,31);
DECLARE @EndDate DATE = DATEFROMPARTS(@inputYear +1,01,01);
SELECT *
FROM MyTable
WHERE dateColumn BETWEEN @StartDate AND @EndDate;
答案 1 :(得分:0)
您可以使用DATEADD
生成日期:
SELECT
YearDate = DATEADD(YEAR, @year - 1900, 0),
DayBefore = DATEADD(DAY, -1, DATEADD(YEAR, @year - 1900, 0)),
YearAfter = DATEADD(YEAR, 1, DATEADD(YEAR, @year - 1900, 0))
如果@year = 2014
:
YearDate DayBefore YearAfter
----------------------- ----------------------- -----------------------
2014-01-01 00:00:00.000 2013-12-31 00:00:00.000 2015-01-01 00:00:00.000
您的查询现在应该是:
SELECT *
FROM YourTable
WHERE
dateColumn >= DATEADD(DAY, -1, DATEADD(YEAR, @year - 1900, 0))
AND < DATEADD(DAY, 1, DATEADD(YEAR, 1, DATEADD(YEAR, @year - 1900, 0)))
请注意,对于结束日期,我会添加另一天并使用<
。
请阅读Aaron Bertrand的article,了解为何不使用BETWEEN
并使用>=
和<
代替。