我使用一个函数来返回存储时间与NOW()之间的差异
示例:
TIMESTAMPDIFF(DAY, NOW(), `stored_time`)
如果我要在单个查询中使用返回的值,例如:
SELECT `column1`, `column2` TIMESTAMPDIFF(DAY, NOW(), `stored_time`)
FROM `table`
WHERE TIMESTAMPDIFF(DAY, NOW(), `stored_time`) > 2
有没有办法重用价值?我尝试过这样的事情:
SELECT `column1`, `column2` @timediff = TIMESTAMPDIFF(DAY, NOW(), `stored_time`)
FROM `table`
WHERE @timediff > 2
但它不起作用。我对MySQL变量一无所知。我该如何解决这个问题?
答案 0 :(得分:0)
也许像
SELECT tt.`column1`, tt.`column2`, t.timediff
FROM `table` tt
LEFT JOIN (SELECT TIMESTAMPDIFF(DAY, NOW(), tt.`stored_time`) as timediff) t on 1=1
WHERE t.timediff > 2
(这未经过测试,但如果您正在寻找,可能会让您走上正轨)
以上显然不适用于MySQL(这是有道理的......我正在考虑APPLY
/ LATERAL JOIN
样式查询,这在MySQL中不存在) 。所以,您可能想要尝试的另一件事是:
SELECT tt.`column1`, tt.`column2`, TIMESTAMPDIFF(DAY, t.dtnow, tt.`stored_time`)
FROM `table` tt
LEFT JOIN (SELECT NOW() as dtnow) t on 1=1
WHERE TIMESTAMPDIFF(DAY, t.dtnow, tt.`stored_time`) > 2
答案 1 :(得分:0)
您可以使用变量为其分配函数值但您必须在WHERE
子句中初始化变量,然后在其中使用它SELECT
:
SELECT `column1`, `column2`, @timediff
FROM `table`
WHERE (@timediff:= TIMESTAMPDIFF(DAY, `stored_time`, NOW())) > 2
与旁注一样,如果您希望TIMESTAMPDIFF
返回正值,则必须将最近的日期作为第3个参数传递。