【发布时间】:2020-04-06 13:06:57
【问题描述】:
我有一个名为offers的表。它有以下列
-
is_special的值为真或假 -
normal_expiry_date具有日期值 -
special_expiry_date具有日期值
现在如果行有is_special = false,那么我想使用where normal_expiry_date > current_date,如果
is_special = true 然后where special_expiry_date > current_date
非常感谢你,即使你试图提供帮助
【问题讨论】:
-
请不要向数据库标签发送垃圾邮件:
mysqloraclepostgresql。您实际使用的是哪一种? -
@ShaheryarAhmed 。 . .我删除了不一致的数据库标签。请仅使用您正在使用的数据库进行标记。
-
从性能和复杂性的角度来看,我会努力避免这样的设计,有条件地与一列或另一列进行比较。我更愿意与单个
expiry_date列进行比较。但如果这不可能,那么我至少会避免OR条件,并将current_date与单个表达式进行比较,例如current_date < CASE WHEN ... THEN t.special_expiry_date WHEN ... THEN t.normal_expiry_date ELSE ... END,对于某些数据库,可以创建基于函数的索引,就好像该表达式是单列一样。