如何更改 date_add 依赖于 table 字段的间隔类型?

How to change the date_add interval type dependant of a field in the table?

假设以下 table(它还有其他行,但查询中使用了下面显示的行),

+-------------------+-----------------+---------------------+ 
| INTERVAL_QUANTITY | INTERVAL_UOM_ID | LAST_UPDATED_STAMP  |
+-------------------+-----------------+---------------------+ 
| 10                | TF_wk           | 2017-10-31 17:21:40 |
| 20                | TF_mon          | 2017-10-30 17:21:40 | 
| 30                | TF_day          | 2017-10-29 17:21:40 |
+-------------------+-----------------+---------------------+

密钥

现在,我有以下查询,

SELECT
    *
FROM
    product_maint 
WHERE
    ( INTERVAL_UOM_ID = 'TF_day' OR INTERVAL_UOM_ID = 'TF_wk' OR INTERVAL_UOM_ID = 'TF_mon' ) 
    AND DATEDIFF( DATE( DATE_ADD( LAST_UPDATED_STAMP, INTERVAL INTERVAL_QUANTITY DAY ) ), DATE( NOW( ) ) ) <= 0;

问题是,当它选择 TF_wkINTERVAL_UOM_ID10INTERVAL_QUANTITY 的行时,它实际上需要添加 70 天不是 10 天,同样当 INTERVAL_UOM_IDTF_mon 并且 INTERVAL_QUANTITY20 它需要添加 560 天(假设我所有的数学都是正确的)。

我将如何实现这个逻辑?

您需要分别检查每个区间。我想你想要:

WHERE ( INTERVAL_UOM_ID = 'TF_day' AND
        LAST_UPDATED_STAMP > CURDATE() - INTERVAL INTERVAL_QUANTITY DAY 
      ) OR
      ( INTERVAL_UOM_ID = 'TF_wk' AND 
        LAST_UPDATED_STAMP > CURDATE() - INTERVAL INTERVAL_QUANTITY WEEK 
      ) OR
      ( INTERVAL_UOM_ID = 'TF_mon' AND
        LAST_UPDATED_STAMP > CURDATE() - INTERVAL INTERVAL_QUANTITY MONTH 
      ) 

请注意,我将 NOW() 更改为 CURDATE()。我认为时间部分对于您想要做的事情并不重要。另请注意,我将逻辑更改为仅适用于日期算术。