【问题标题】:How to set date in parameter between past years and months如何在过去几年和几个月之间的参数中设置日期
【发布时间】:2021-07-01 17:57:48
【问题描述】:

我必须准备一份需要选择数据的报告:

当年 - 1 在当年 - 10 和当月 - 19 之间

所以我创建了参数:

DECLARE @EvaluationYearOld int = YEAR(GETDATE()) - 10
DECLARE @EvaluationYearNew int = YEAR(GETDATE()) - 1
DECLARE @EvaluationMonthCurrent int = Month(GETDATE()) - 19


SELECT * FROM tbl
WHERE 
    year(raportdate) > @EvaluationYearOld
    AND year(raportdate) < @EvaluationYearNew
    AND month(raportdate) < @EvaluationMonthCurrent

效果不好。我认为月份有问题。

【问题讨论】:

  • EvaluationMonthCurrent 将介于 -18 和 -7 之间...月(报告日期)
  • 不清楚您想要的具体年份和月份。你每年只想要1个月吗?还是要从当前月份返回到 10 年前的年初
  • 您的月份条件将跳过所涉及的每一年的月份...
  • @Charlieface 我想要当前年份 (2021) - 1 = 2020 和当前年份 (2021) - 10 = 2011 之间的日期范围。所选数据应介于 2020 年和 2011 年(今年)之间在职的。问题是关于添加当前月份 - 19
  • @ninjaloot777 。 . .你的评论有帮助,但只有一点点。编辑问题并明确显示您想要的特定参数值的数据范围。

标签: sql sql-server tsql


【解决方案1】:

我认为这应该可行。试试看:

DECLARE @EvaluationYearOld int = YEAR(GETDATE()) - 10
DECLARE @EvaluationYearNew int = YEAR(GETDATE()) - 1
DECLARE @EvaluationMonthCurrent int = Month(GETDATE()) - 7


SELECT * FROM tbl
WHERE 
    year(raportdate) between @EvaluationYearOld
    AND @EvaluationYearNew
    AND month(raportdate) < @EvaluationMonthCurrent

而且您必须使用小于 12 的负月份。因为当您从一个月中取出 19 时,就像您从它中取出 1 年零 7 个月一样。那你的情况可能有问题。

【讨论】:

    【解决方案2】:
    DECLARE @EvaluationMonthCurrent int = Month(GETDATE()) - 19
    

    在上面的行中,MONTH(Date) 函数将返回 1 到 12 范围内的整数,并且从它们中减去 19,所以如果你取 MONTH(Date) 的最大值,即 12,那么你会得到 12-19=-7所以为了得到正确的值使用这个函数

    DECLARE @EvaluationMonthCurrent int = MONTH(DATEADD(MONTH,-19,GETDATE()))
    

    这将为您提供正确的值。

    【讨论】:

    • 是的,它正确显示月份,但使用 where 子句不能很好地过滤。它的日期从 2011 年等开始
    • 为此我需要 reportdate 列的值
    • 这些值类似于:2019-02-08 00:00:00.000 2019-02-10 00:00:00.000 2019-02-12 00:00:00.000 2019-05-01 00: 00:00.000 2019-03-13 00:00:00.000 2018-11-15 00:00:00.000
    • @ninjaloot777 您给出的所有值在您的查询中都可以正常工作。请解释您想要的日期范围是什么以及为什么使用 month 。正如您的代码建议的那样,您希望日期从 2011 年到 2020 年(不包括两者),并且月份不等于 12(十二月)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多