我有一个名为sample_table
的小表:
Column Data Type
id int PK NOT NULL
d1 date NOT NULL
d2 date NOT NULL
我希望选择d1
和d2
之间的时间间隔,基于条件是如果差异不是整数,那么差异的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
语法有问题,只是我无法弄清楚在哪里,以及如何正确地做到这一点。
答案 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