2013-04-15 31 views
-1

不確定最好的方法來做到這一點,應用程序是較舊的,這就是爲什麼我有這麼多的麻煩。我讀過關於做CASE的聲明,但我沒有太多的SQL經驗。任何幫助表示讚賞和答覆將受到尊重。謝謝。此外,沒有設計,編寫應用程序的人使用佔位符,所有數據來自這個巨大的文件,這是超出我的。我不知道爲什麼,因爲我從未見過這樣的事情。這是一個怪物。如果在30天內或已過期,更改「過期日期」字體顏色?

'- 
Dim TemplateColumnCDLExpiration As System.Web.UI.WebControls.TemplateColumn 
TemplateColumnCDLExpiration = New System.Web.UI.WebControls.TemplateColumn 
If Me.AllowSorting Then 
    TemplateColumnCDLExpiration.SortExpression = "CDLExpiration" 
End If 
TemplateColumnCDLExpiration.ItemTemplate = 
    New JAG.WebUI.Controls.IEditGridTemplate(ListItemType.Item, 
     "CDLExpiration", 
     JAG.WebUI.Controls.tEditGridItemControlType.Label) 
TemplateColumnCDLExpiration.HeaderText = "CDL Expiration" 
MyBase.Columns.Add(TemplateColumnCDLExpiration) 
'- 
+1

字體顏色與SQL有什麼關係? – Dai

+0

你的問題是什麼? – Melanie

回答

0

OK,我給你回答了你的問題CASE,但你要保證,你閱讀以下的注意事項。 :)

我正在使用Oracle SQL;我不知道其他SQL實現的語法是否不同。這裏是一個虛擬的查詢爲例,說明語法:

SELECT 
    CASE 
    WHEN (sysdate - TO_DATE('04/09/2013', 'mm/dd/yyyy') > 30) THEN 'red' 
    ELSE 'black' 
    END text_color 
FROM dual; 

WHEN後括號中的代碼是測試。它將當前日期與4月9日進行比較,並詢問「3月9日30多天前?」如果是這樣,則返回'red'作爲值text_color。如果該條件爲假,則返回'black'。這裏是一個更廣義的形式:

SELECT 
    CASE 
    WHEN (sysdate - :date_to_check > :expiration_days) THEN 'red' 
    ELSE 'black' 
    END text_color 
FROM :my_table; 

考慮

你不需要這個討厭的邏輯塊的SQL。自給定日期起經過X天的檢查不是數據庫邏輯。獲取日期是數據庫邏輯,決定從該日期算起有多少天,直到今天可以被認爲是數據庫邏輯或業務邏輯,但決定文本顏色絕對是顯示邏輯,這意味着您應該修改您的.NET代碼,而不是你的SQL。如果您需要更改顯示顏色,會發生什麼情況?日期檢查保持不變,但您必須修改...您的SQL?只有在正在檢索或存儲的數據被修改時才需要進行SQL修改。底線是,這不是一個乾淨的關注點。