我需要能够为参数添加年份的月份和日期。
由于我们的财政年度从每年的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%'
答案 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