首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单个SELECT语句中两次消除相同值的计算

在单个SELECT语句中两次消除相同值的计算
EN

Stack Overflow用户
提问于 2016-09-06 21:38:14
回答 1查看 81关注 0票数 0

我需要修改datetime字段的输出,以便它返回该日期所在周的第一天。例如,如果日期是2016年9月2日,它应该返回2016年8月29日,因为那是周的星期一(我要星期一,而不是周日)。但是,我还需要将时间戳转换为不同的时区。其结果是,我不得不将时区转换两次:

代码语言:javascript
复制
CONVERT_TZ(timestamp, '+00:00', '+05:00') - INTERVAL WEEKDAY(CONVERT_TZ(timestamp, '+00:00', '+05:00')) day

我不能简单地在UTC日期时间上执行INTERVAL计算,然后在结果上转换时区,因为时区转换可能会影响WEEKDAY函数的结果,例如,2016-9-5 00:00 UTC的日期时间实际上会下降到EST的9/4,从而导致它成为另一周的一部分。

是否有一种方法可以避免在CONVERT_TZ语句中调用两个SELECT

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-06 21:44:29

您可以将其放入子查询中。

代码语言:javascript
复制
SELECT converted - INTERVAL WEEKDAY(converted) AS day
FROM (SELECT CONVERT_TZ(timestamp, '+00:00', '+05:00') AS converted
      FROM yourTable) AS x

另一种方法是给用户变量赋值。为了能够两次使用它,将赋值放入IF()表达式的条件部分--这将确保分配将在使用之前完成。

代码语言:javascript
复制
IF(@converted := CONVERT_TZ(timestamp, '+00:00', '+05:00'),
    @converted - INTERVAL(WEEKDAY(@converted) DAY, 
    NULL) AS day
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39358230

复制
相关文章

相似问题

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