2017-04-07 93 views
1

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

由于我们的财政年度从每年的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,至少在widget,他们给我输入SQL转化为我们的记录软件,不喜欢'@param3-07-01'的语法将日期字符串中的参数放在日期字符串中进行评估,但它会接受'2016-07-01'将允许其他情况下将参数放入字符串中的where子句中,例如Like '%@param1%'

+2

你使用哪个SQL服务器? – cmks

+0

]来自供应商:Credible不共享这些信息,因为它是专有的,但是我检查了我们的IT部门,发现如果您正在编写的查询是标准SQL,那么它将运行。如果您还有其他问题,请告诉我。“ –

回答

0

我在看这个落后。该解决方案不是将year参数转换为日期,而是将日期转换为一年。

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)