2014-11-02 57 views
0

我有一個查詢,我需要獲取4列中的值,但只有當日期比第5列中的日期更大時。我已經嘗試了以下,但它似乎並沒有工作。只有當日期>今天時才獲取列值

Select 
(case when clientplans.END_DATE < convert(date,getdate(,101) then '') else insplans.Desc_upper as PLAN NAME, 
(case when clientplans.END_DATE < convert(date,getdate(,112) then '') else insplans.ID_NO, 
(case when clientplans.END_DATE < convert(date,getdate(,112) then '') else insplans.cert_NO, 

我已經轉換的結束日期的時間如下: 轉換(VARCHAR,clientplans.END_DATE,112),爲POLICY_EXP_DATE,

它的問題,我做結束日期的轉換後在查詢中? clientplans.end_date必須以特定順序插入結果中,該順序恰好在描述,id和證書編號之後。謝謝你的幫助。

回答

0

也許這樣的事情你想要做什麼:

Select (case when cp.END_DATE > cast(getdate() as date) then insplans.Desc_upper end) as PLAN_NAME, 
     (case when cp.END_DATE > cast(getdate() as date) then insplans.ID_NO end) as ID_NO, 
     (case when cp.END_DATE > cast(getdate() as date) then insplans.cert_NO END) as cert_NO 
from clientplans cp . . . 

注意以下幾點:

  • 該表使用表別名(cpclientplans),所以查詢更容易編寫和讀。
  • 它使用cast()date來獲取日期。
  • 非匹配行給出的值爲NULL而不是''。這通常更有意義。

編輯:

當然,你可以使用'',如果你喜歡:

Select (case when cp.END_DATE > cast(getdate() as date) then insplans.Desc_upper else '' end) as PLAN_NAME, 
     (case when cp.END_DATE > cast(getdate() as date) then insplans.ID_NO else '' end) as ID_NO, 
     (case when cp.END_DATE > cast(getdate() as date) then insplans.cert_NO else '' end) as cert_NO, 
     (case when cp.END_DATE > cast(getdate() as date) 
      then convert(varchar(255), cp.StartDate, 121) else '' 
     end) as StartDate 
from clientplans cp . . . 
+0

完美的工作。我必須在結果中有'',因爲我的接口不會接受NULL。如果它超過今天,那隻剩下我不需要的到期日期。 – 2014-11-02 16:44:21

+0

我嘗試使用相同的語句,但它不工作(clientplans.END_DATE>案件時(getdate()作爲日期)然後''轉換(varchar,clientplans.START_DATE,112)爲POLICY_EFF_DATE, – 2014-11-02 16:45:13

+0

@RobertIngrim。。。在SQL Server中使用'varchar()'時應該總是有一個長度,但這可能不是問題,也許問題是'case'返回的字段長度,我總是試着把實際值放在第一位,在後面使用常量值,所以SQL Server肯定會選擇我真正想要的類型。 – 2014-11-02 16:51:09

0

使用該得到今天開始:DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

例如:

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) 

對你而言RS ...

Select 
(case when clientplans.END_DATE > DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) then '') else insplans.Desc_upper as PLAN NAME, 
(case when clientplans.END_DATE > DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) then '') else insplans.ID_NO, 
(case when clientplans.END_DATE > DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) then '') else insplans.cert_NO, 
0

我認爲適當的鑄件所以我需要在查詢getdate(,101)使用這裏CAST(Field as DATE)和 是錯誤的語法

Select 
(case when CAST(clientplans.END_DATE as date) < CAST(getdate() as date) then '') 
else insplans.Desc_upper as PLAN NAME, 
(case when CAST(clientplans.END_DATE as date) < CAST(getdate() as date) then '') 
else insplans.ID_NO, 
(case when CAST(clientplans.END_DATE as date) < CAST(getdate() as date) then '') 
else insplans.cert_NO 
0

您可以使用光標在第5列

並檢查@cursor_date>比今天更大。

只有這樣才能得到4列的其餘部分。