2012-07-02 215 views
2

我的意思是这样的:有没有办法在更新mysql查询中定义变量?

update table_name set field_1=if(date_add(data_field,interval 30 hour) >= now(),1,0), field_2=if(date_add(data_field,interval 30 hour) >= now(),1,0) where ... 

以及在这种情况下,我需要使用DATE_ADD(data_field中,时间间隔30小时)的两倍,在那里将其存储在一个变量或类似的东西的方法吗?那么我不需要调用它两次。

谢谢。

回答

1

肯定的:

set @mydate := date_add(data_field,interval 30 hour); 

update table_name set 
field_1=if(@mydate >= now(),1,0), 
field_2=if(@mydate >= now(),1,0) 
where ... 

据透露,这些被称为user defined variables

+0

但函数调用的第一个'data_field'参数可能是表中的一列... – eggyal

2

这是不必要的优化,查询优化器将认识到,函数调用是确定性的,缓存调用一次的结果,重新使用该结果代替第二个呼叫。

相关问题