如何更改 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 |
+-------------------+-----------------+---------------------+
密钥
- TF_wk => 周
- TF_mon => 月份
- TF_day => 日
现在,我有以下查询,
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_wk
的 INTERVAL_UOM_ID
和 10
的 INTERVAL_QUANTITY
的行时,它实际上需要添加 70
天不是 10
天,同样当 INTERVAL_UOM_ID
是 TF_mon
并且 INTERVAL_QUANTITY
是 20
它需要添加 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()
。我认为时间部分对于您想要做的事情并不重要。另请注意,我将逻辑更改为仅适用于日期算术。
假设以下 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 |
+-------------------+-----------------+---------------------+
密钥
- TF_wk => 周
- TF_mon => 月份
- TF_day => 日
现在,我有以下查询,
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_wk
的 INTERVAL_UOM_ID
和 10
的 INTERVAL_QUANTITY
的行时,它实际上需要添加 70
天不是 10
天,同样当 INTERVAL_UOM_ID
是 TF_mon
并且 INTERVAL_QUANTITY
是 20
它需要添加 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()
。我认为时间部分对于您想要做的事情并不重要。另请注意,我将逻辑更改为仅适用于日期算术。