MySQL重用函数返回的值

时间:2015-05-12 13:39:05

标签: mysql

我使用一个函数来返回存储时间与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变量一无所知。我该如何解决这个问题?

2 个答案:

答案 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个参数传递。

SQL Fiddle Demo