经常重复表达的别名

时间:2014-03-27 06:18:44

标签: mysql mysqli

我有一张像这样的地方的表格

   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然后多次使用它吗?

感谢。

1 个答案:

答案 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

请注意,在查询中使用组函数时,这种使用变量的方法不起作用。