在同一Statement中直接使用IF语句的结果

时间:2015-09-22 11:47:24

标签: mysql if-statement

我的声明如下:

SELECT *,
IF (valid_till = "9999-12-31 23:59:59", NOW(), valid_till) as valid_till, 
(valid_till - valid_from) as summary
FROM tablename

因此有效直到的输出看起来是正确的,但摘要的值仍然按照" 9999-12-31 23:59:59"

的值来计算

如何实现该摘要直接由IF语句生成的valid_till值计算?

谢谢

2 个答案:

答案 0 :(得分:0)

使用子查询:

SELECT A.*,(valid_till - valid_from) as summary (SELECT *,
IF (valid_till = "9999-12-31 23:59:59", NOW(), valid_till) as valid_till
FROM tablename) as A

答案 1 :(得分:0)

MySQL允许通过“@”使用内联变量。在处理每个记录时考虑它并且:=分配一个值,你可以使用它作为下一个语句(或列计算)的基础。它必须首先声明,因此只是出于声明目的而成为别名的二级。

SELECT 
      *,
      @UntilVar := IF(valid_till = @baseDate, NOW(), valid_till) as valid_till, 
      (@UntilVar - valid_from) as summary
   FROM 
      tablename,
      ( select @UntilVar := now(),
               @baseDate := "9999-12-31 23:59:59" ) sqlvars

注意我是根据您的IF()通过:=分配“@UntilVar”。然后@UntilVar - valid_from应该可以满足您的需求。