如何在`IF`表达式中使用用户定义的变量?

时间:2017-07-10 08:19:12

标签: mysql sql

我的一些SQL语句如下:

  IF(timediff(a.wo_finish_time,
               IF(a.wo_failure_time <> '0000-00-00 00:00:00',
                  a.wo_failure_time,
                  a.wo_creation_time)) < 0,
      0,
      timediff(a.wo_finish_time,
               IF(a.wo_failure_time <> '0000-00-00 00:00:00',
                  a.wo_failure_time,
                  a.wo_creation_time)))

正如你所看到的,它是冗长的,因为它的一部分出现了两次。所以我尝试了这样的用户定义变量:

 if(@down_time := timediff(a.wo_finish_time,
                             IF(a.wo_failure_time <> '0000-00-00 00:00:00',
                                a.wo_failure_time,
                                a.wo_creation_time)) < 0,
      0,
      @down_time)

可能由于变量范围的不同,它不起作用。我知道我可以将这个@down_time变量声明放在SELECT列表中,但这也会将它添加到输出列。我想一定有更好的方法,所以我发布这个问题,希望能找到更好的方法。

1 个答案:

答案 0 :(得分:1)

您可以使用以下ssh -i mycert.pem testuser@myserver.com << 'SSHBLOCK' pm2 logs --lines 100 & pid=$! sleep 3 kill $pid SSHBLOCK 技巧:

GREATEST

不需要动态SQL的另一种解决方法是包装当前查询,然后子查询正确的值,如下所示:

SELECT GREATEST(0, TIMEDIFF(a.wo_finish_time,
                       IF(a.wo_failure_time <> '0000-00-00 00:00:00',
                       a.wo_failure_time,
                       a.wo_creation_time)))
FROM yourTable

如果您已经在使用这样的子查询或性能并不重要,那么第二个选项可能有意义。