我需要修改datetime字段的输出,以便它返回该日期所在周的第一天。例如,如果日期是2016年9月2日,它应该返回2016年8月29日,因为那是周的星期一(我要星期一,而不是周日)。但是,我还需要将时间戳转换为不同的时区。其结果是,我不得不将时区转换两次:
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?
发布于 2016-09-06 21:44:29
您可以将其放入子查询中。
SELECT converted - INTERVAL WEEKDAY(converted) AS day
FROM (SELECT CONVERT_TZ(timestamp, '+00:00', '+05:00') AS converted
FROM yourTable) AS x另一种方法是给用户变量赋值。为了能够两次使用它,将赋值放入IF()表达式的条件部分--这将确保分配将在使用之前完成。
IF(@converted := CONVERT_TZ(timestamp, '+00:00', '+05:00'),
@converted - INTERVAL(WEEKDAY(@converted) DAY,
NULL) AS dayhttps://stackoverflow.com/questions/39358230
复制相似问题