选择一年前后一天的SQL

时间:2015-05-13 01:35:50

标签: sql sql-server sql-server-2008

我想在一年内选择一个数据。但是我需要在一年前后的一天选择一个数据。

例如:
如果我选择年份2014,那么结果应该从31/Dec/2013开始直到01/Jan/2015

SELECT DATEPART(YEAR, myDate) = '2014' FROM MyTable

我的参数仅为“年份”。 有谁知道如何做到这一点?
谢谢。

2 个答案:

答案 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并使用>=<代替。