我可以使用字段作为'unit'参数TIMESTAMPDIFF()吗?
例如,这是一个片段:
SELECT foo FROM table t LEFT JOIN frequencies f USING (frequency_id)
WHERE MOD(TIMESTAMPDIFF(f.frequency_code, t.date, NOW()), t.frequency_num) = 0
Run Code Online (Sandbox Code Playgroud)
运行它时会出现语法错误.现在,如果我取代f.frequency_code与实际字- MINUTE,DAY等-它的工作原理.但这些正是目前包含的词语f.frequency_code.
是否只能在该位置使用表字段?
TIMESTAMPDIFF() 不支持这样的动态单位.
由于您使用的是一组已知单位,因此您可以使用CASE语句来实现此目的.
从您的示例查询开始,这样的事情可能会起作用:
SELECT foo
FROM table t
LEFT JOIN frequencies f USING (frequency_id)
WHERE MOD(
(CASE
WHEN f.frequency_code = 'MICROSECOND' THEN TIMESTAMPDIFF(MICROSECOND, t.date, NOW())
WHEN f.frequency_code = 'SECOND' THEN TIMESTAMPDIFF(SECOND, t.date, NOW())
WHEN f.frequency_code = 'MINUTE' THEN TIMESTAMPDIFF(MINUTE, t.date, NOW())
WHEN f.frequency_code = 'HOUR' THEN TIMESTAMPDIFF(HOUR, t.date, NOW())
WHEN f.frequency_code = 'DAY' THEN TIMESTAMPDIFF(DAY, t.date, NOW())
WHEN f.frequency_code = 'WEEK' THEN TIMESTAMPDIFF(WEEK, t.date, NOW())
WHEN f.frequency_code = 'MONTH' THEN TIMESTAMPDIFF(MONTH, t.date, NOW())
WHEN f.frequency_code = 'QUARTER' THEN TIMESTAMPDIFF(QUARTER, t.date, NOW())
WHEN f.frequency_code = 'YEAR' THEN TIMESTAMPDIFF(YEAR, t.date, NOW())
END)
, t.frequency_num) = 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |