在CASE SQL语句中使用BETWEEN

时间:2011-01-04 12:02:30

标签: sql sql-server

我希望从我们的费率表中获得所有12个月的平均费率并将其除以数月,我开始用案例编写一个SQL选择,但我似乎在“之间”部分做错了。所以我的SQL

SELECT AVG(SELL_RATE),
       AVG(BUY_RATE),
       CASE MONTHS
            WHEN RATE_DATE( BETWEEN '2010-01-01' AND '2010-01-31') THEN 'JANUARY'
            ELSE 'NOTHING'
   END AS 'MONTHS'
FROM   RATE
WHERE  CURRENCY_ID = CURRENCY -033'

2 个答案:

答案 0 :(得分:31)

从你的案例中取出MONTHS,并删除括号......如下:

CASE 
    WHEN RATE_DATE BETWEEN '2010-01-01' AND '2010-01-31' THEN 'JANUARY'
    ELSE 'NOTHING'
END AS 'MONTHS'

你可以认为这相当于:

CASE TRUE
    WHEN RATE_DATE BETWEEN '2010-01-01' AND '2010-01-31' THEN 'JANUARY'
    ELSE 'NOTHING'
END AS 'MONTHS'

答案 1 :(得分:0)

你没有说明为什么你认为这是错误的,但我可以有两个危险:

BETWEEN可以在不同的数据库中以不同的方式实现,有时它包括边界值并且有时被排除,导致1月1日和31日最终结束。您应该测试数据库如何执行此操作。

另外,如果RATE_DATE包含小时数,则2010-01-31可能会被翻译为2010-01-31 00:00,这也会排除任何一小时以外的00:00行。