2017-04-07 95 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)