MySQL DATE_SUB不使用变量但使用常规值

时间:2011-03-07 01:25:43

标签: mysql sql

我有一部分查询:

(@tmpo1245 := CAST( ( ( pm5.`meta_value` - pm4.`meta_value` ) / 86400 ) AS SIGNED ) ) AND
(@mutdate:=DATE_SUB( '2011-06-1', INTERVAL @tmpo1245 DAY ) ) AND

导致我的查询失败的原因。我知道CAST( ( ( pm5. meta_value - pm4. meta_value ) / 86400 ) AS SIGNED )是5,我把它放在一个select语句中进行测试。我也知道以下查询工作正常:

(@tmpo1245 := 5 ) AND
(@mutdate:=DATE_SUB( '2011-06-1', INTERVAL @tmpo1245 DAY ) ) AND

发生了什么事?

1 个答案:

答案 0 :(得分:1)

似乎错误在于查询中CAST内的子句。我猜你试图减去的pm5。meta_value和pm4。meta_value的数据类型不是数字。因此,请在减去之前先将它们转换为小数。示例代码如下。

@tmpo1245 := CAST( ( ( 
    CAST( pm5.`meta_value` AS DECIMAL) - CAST( pm4.`meta_value` AS DECIMAL)) / 86400 ) 
    AS SIGNED )