MySQL使用CASE .. WHEN语法选择数据的适当方式

时间:2014-10-26 06:15:59

标签: mysql sql

我有一个名为sample_table的小表:

    Column               Data Type
     id                  int PK NOT NULL
     d1                  date NOT NULL
     d2                  date NOT NULL

我希望选择d1d2之间的时间间隔,基于条件是如果差异不是整数,那么差异的ceiling将是选中,否则将选择差异的floor

我尝试使用CASE ... WHEN

执行此操作
SELECT( 
CASE 
    WHEN (((DATEDIFF(d1,d2)/365)%1) != 0) THEN CEILING(DATEDIFF(d1,d2)/365) 
    ELSE FLOOR(DATEDIFF(d1,d2)/365) 
END CASE)
AS diff
FROM sample_table

但收到以下错误:

 Error Code: 1064
 Syntax error near 'case when (((DATEDIFF(d1,d2)/365))!=0) THEN CEILING (DATEDIFF(d' on line 2

我的示例输入:

   id            d1                d2
    1        2013-10-25        2014-10-22
    2        2012-10-25        2014-10-25
    3        2014-10-28        2014-10-28
    4        2012-10-23        2014-10-26

我的预期输出:

   diff
    1
    2
    0
    3

我知道我的CASE ... WHEN语法有问题,只是我无法弄清楚在哪里,以及如何正确地做到这一点。

2 个答案:

答案 0 :(得分:2)

@geoandri对正确使用case给出了正确答案,但请注意,您并不需要它。对于整数,x = floor(x) = ceiling(x)。所以你也可以随时致电ceiling,并完成它:

SELECT CEILING((DATEDIFF(d1,d2)/365))
FROM   sample_table

答案 1 :(得分:1)

尝试在结束后删除第二个CASE

SELECT
CASE 
WHEN (((DATEDIFF(d1,d2)/365)%1) != 0) THEN CEILING(DATEDIFF(d1,d2)/365) 
ELSE FLOOR(DATEDIFF(d1,d2)/365) 
END AS diff
FROM sample_table