如果在30天内或已经过期,请更改“失效日期”字体颜色?

时间:2013-04-15 18:31:30

标签: asp.net sql case iif

不确定这样做的最佳方法,应用程序是较旧的,这就是为什么我在生成这个时遇到这么多麻烦。我读过关于做一个CASE语句,但我没有太多的SQL经验。任何帮助表示赞赏,答案将得到尊重。谢谢。此外,没有设计,编写应用程序的人使用占位符和所有数据来自这个巨大的文件,这超出了我。我不知道为什么,因为我从未见过这样的事情。这是一个怪物。

'-
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 个答案:

答案 0 :(得分:0)

好的,我会给你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日进行比较,并询问“4月9日是否超过30天?”如果是,则返回'red'作为text_color的值。如果该条件为false,则返回'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修改。最重要的是,这不是一个清晰的关注点分离。