-1

不确定执行此操作的最佳方法,该应用程序较旧,这就是为什么我在生成它时遇到这么多麻烦的原因。我读过关于做 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)
'-
4

1 回答 1

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。如果该条件为假,则返回'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 修改。最重要的是,这不是一个干净的关注点分离。

于 2013-04-15T19:48:02.237 回答