我有一张像这样的地方的表格
placeid offset1 effectivetill1 offset2 effectivetill2
1 3600 2014-01-05 10:23:13 0 2014-07-05 10:23:13
2 -7200 2014-01-05 10:23:13 -3600 2014-07-05 10:23:13
我运行一个非常大的查询,需要为每个地方使用当地时间。因此如果 " TS"是现在的UTC时间戳," datetime"是当前的UTC日期时间,我使用以下公式查找当地时间:
IF(effectivetill1='0000-00-00' OR effectivetill1>=datetime, ts+offset1,
IF(effectivetill2>=datetime, ts+offset2, 0)
)
所以我需要在我的查询中多次重复上面的代码,这对于计算和代码可读性都是愚蠢的。
无论如何我可以在查询中定义一次localtime然后多次使用它吗?
感谢。
答案 0 :(得分:1)
假设您将在每个行级别使用相同的变量,
尝试:
@ts_with_offset:=IF( effectivetill1 = '0000-00-00' OR
effectivetill1 >= datetime,
ts + offset1,
IF( effectivetill2 >= datetime, ts + offset2, 0 )
) as name_of_this_expression
并使用变量@ts_with_offset
根据此值或类似值获取其他值。
if ( @ts_with_offset >= now(), true, false ) as matched
请注意,在查询中使用组函数时,这种使用变量的方法不起作用。