2014-06-18 231 views
0

我對SQL仍然很陌生,所以我所問的這個問題可能對您很容易。因此,我創建了一份報告,每週會生成資助合同的前14天(或2周)。我知道這必須硬編碼給一個特定的公司。該特定公司的ID是'55'那麼有人可以幫助我使用此功能嗎?我的查詢我知道還沒有完成我只是堅持如何爲此輸入Date函數。每週計算2周SQL

Create PROC [dbo].[spAdminFundedDateee] 

    Begin 

     SELECT c.program_id, d.dealer_code,b.last_name As DealerName, a.account_no, a.vin, 
       ((e.last_name)+','+(e.first_name)) As Name, a.funded_date, a.cancel_refund_date, 
        a.purchase_date,a.miles, a.duration,a.sale_price,a.number_of_payments, 
        a.sales_tax, a.downpayment 

     from tDealer d 
    Join tContact b ON d.contact_id = b.contact_id 
    Join tContract a On d.dealer_id = a.dealer_id 
    Join tCompany c ON d.company_id= c.company_id 
    Join tContact E On e.contact_id = a.contact_id 

     Where c.program_id = 55 And a.funded_date between 

     End 

    exec spAdminFundedDateee '05/1/2014','05/30/2014','55' 
+0

閱讀有關存儲過程的SQL Server文檔,特別是有關傳遞參數的部分。在這種情況下,您可以傳遞參數'@ ProgramID'和'@ FundedDate',並計算出資日期參數的起始日期。 –

+0

首先,您需要將參數指定給SP。然後你可以在[@BeginDate]和[@EndDate]之間做一個。 – TMNT2014

+0

我打算這樣做,但我的老闆想要它沒有參數。我必須對它進行硬編碼。它也將成爲訂閱 – user3753188

回答

0

一個日期,以便檢查是否a.funded_date是今天的日期之間兩個星期前,你將需要幾個SQL服務器功能。第一個是GetDate()。這將返回當前日期和時間作爲日期時間值。

現在,您只想檢查日期參數(而不是時間)。如果有人在下午1點運行存儲過程,則不希望從14天前的下午1點之前刪除所有數據。你需要所有的數據,不管時間,從14天前開始。爲了解決這個問題,我們希望將getDate()更改爲僅限日期。所以,cast(getDate()作爲日期)。今天,這將返回6-18-14。

最後,你想檢查兩週前的日期。 dateAdd允許您將指定的任意時間量添加到日期或時間。在這種情況下,您需要14天前的信息。這看起來像dateadd(dd,-14,cast(getDate()as date))。

因爲之間是包容性的,所有你現在需要做的就是放在一起!

between dateadd(dd, -14, cast(getDate() as date)) and cast(getDate() as date) 
+0

所以我嘗試了你的編解碼器。我把它放在一起,但我執行時沒有結果。我的sp有錯嗎? – user3753188

+0

@ user3753188你是否得到一個空表或者你有錯誤?如果你得到一個空表,你應該嘗試查看存儲在表中的信息並找到這個查詢應該撤回的數據點。 – Jenn

0

如果a.funded_date是DATETIME然後

a.funded_date between dateadd(day,-14,getdate()) and getdate() 

如果a.funded_date然後

a.funded_date between cast(dateadd(day,-14,getdate()) as date) and cast(getdate() as date) 
+0

這是假設,前14天的資助合同意味着:今天14天前。 – Will

0

嘿傢伙,所以我更新了我的Where子句,但是當我運行查詢我得到的列標題,但與一個空表。當我輸入日期的硬編碼時,它是正確的嗎?對於Date函數,我還是一個新手,所以我知道對於大多數人來說這對你來說一定是常識。我想假設在14天之前對日期進行硬編碼,並且假設在每兩週的14天之前每週一獲得資助合同。這是我的第一份報告,所以我很抱歉問一些你可能認爲我應該知道的問題。我仍在學習。

 Alter PROC [dbo].[spAdminFundedDateee] 
     As 
     Begin 
      SELECT c.program_id, d.dealer_code,b.last_name As DealerName, a.account_no, 
        a.vin, ((e.last_name)+','+(e.first_name)) As Name, 
        a.funded_date, a.cancel_refund_date, a.purchase_date,a.miles, 
        a.duration,a.sale_price,a.number_of_payments, a.sales_tax, a.downpayment 


     from tDealer d 
     Join tContact b ON d.contact_id = b.contact_id 
     Join tContract a On d.dealer_id = a.dealer_id 
     Join tCompany c ON d.company_id= c.company_id 
     Join tContact E On e.contact_id = a.contact_id 


    Where c.program_id = 55 And a.funded_date between '05/19/2014' and '06/02/2014'And 
      a.funded_date between dateadd(dd, -14, cast(getDate() as date)) and cast(getDate() 
      as date) 


    END 
    GO 

    EXEC spAdminFundedDateee