首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL重用函数返回的值

问MySQL重用函数返回的值
EN

Stack Overflow用户
提问于 2015-05-12 21:39:05
回答 2查看 135关注 0票数 0

我使用一个函数返回存储的时间与当前时间之间的差值()

示例:

代码语言:javascript
复制
TIMESTAMPDIFF(DAY, NOW(), `stored_time`)

如果我要在一个查询中使用返回值,如下所示:

代码语言:javascript
复制
SELECT `column1`, `column2` TIMESTAMPDIFF(DAY, NOW(), `stored_time`)
FROM `table`
WHERE TIMESTAMPDIFF(DAY, NOW(), `stored_time`) > 2

有没有重用这个值的方法?我尝试过这样的东西:

代码语言:javascript
复制
SELECT `column1`, `column2` @timediff = TIMESTAMPDIFF(DAY, NOW(), `stored_time`)
FROM `table`
WHERE @timediff > 2

但它不起作用。我对MySQL变量一无所知。我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2015-05-12 21:41:24

也许是像这样的

代码语言:javascript
复制
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中是不存在的)。因此,您可能想要尝试的另一件事是:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-05-12 22:28:23

您可以使用变量为其分配函数值,但必须在WHERE子句中初始化该变量,然后在SELECT中使用它

代码语言:javascript
复制
SELECT `column1`, `column2`, @timediff
FROM `table`
WHERE (@timediff:= TIMESTAMPDIFF(DAY, `stored_time`, NOW())) > 2

作为附注,如果您希望TIMESTAMPDIFF返回一个正值,那么您必须将最近的日期作为第三个参数传递。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30192600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档