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

时间:2017-04-07 21:17:32

标签: sql parameters optional-parameters

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

由于我们的财政年度从每年的7月1日开始,我需要做到这一点,以便用户可以输入会计年度' YYYY'作为参数,它将返回从该年开始前一年的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%'

2 个答案:

答案 0 :(得分:0)

我正在向后看。解决方案不是将年度参数转换为日期,而是将日期转换为年份。

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)

答案 1 :(得分:0)

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

例如:

B