将月份和日期作为 SQL 参数添加到年份

Add month and date to year as SQL parameter

我需要能够将月份和日期添加到参数的年份。

由于我们的财政年度从每年 7 月 1 日开始,因此我需要这样做,以便用户可以输入财政年度 'YYYY' 作为参数,它将 return 来自财政的结果前年7月1日开始,当年7月1日结束。

例如。对于 2016 财年,我需要所有在 2015 年 7 月 1 日之后结束并在 2016 年 6 月 30 日之前开始的记录。目前用户必须记住指定 7 月 1 日和 6 月 30 日。我怎样才能做到这一点,以便他们只需输入年?

目前有效,但需要完整的日期作为参数

Where (E.end_date > @param1 Or E.end_date Is Null Or @param1 Is Null) And
  (E.start_date < @param2 Or e.start_date Is Null Or @param2 Is Null)

但这行不通

Where (A.end_date > @param1 Or A.end_date Is Null Or @param1 Is Null) And
    (A.start_date < DateAdd(day, 1, @param2) Or A.start_date Is Null Or
      @param2 Is Null)
      And
      (A.end_date > dateadd(yyyy,-1,'@param3-07-01') And
    A.start_date < '@param3-07-01' Or @param3 Is Null)

SQL,至少在他们给我的小部件中,我将 SQL 输入到我们的记录软件中,不喜欢 '@param3-07-01' 将参数放入日期的语法用于评估日期的字符串,但它会接受 '2016-07-01' 将允许我将参数放在 where 子句中的字符串中的其他情况,例如 Like '%@param1%'

我是倒着看的。解决方案不是将年参数转换为日期,而是将日期转换为年。

year(dateAdd(mm,6,A.start_date))
year(dateAdd(mm,6,A.end_date))

我将它插入到我的代码中,效果很好。

Where (year(dateAdd(mm,6,A.end_date)) > @param1 Or A.end_date Is Null Or @param1 Is Null) And
    (year(dateAdd(mm,6,A.start_date)) < DateAdd(day, 1, @param2) Or A.start_date Is Null Or @param2 Is Null)

一种更简单的方法是将年份参数作为字符串并将日期连接为字符串文字。然后,我们可以使用数据类型转换函数来转换日期

例如:

SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy