我试图从表格中选择*,但选择范围取决于输入的月份。
我在WHERE子句中使用CASE来确定月值,并选择正确的Where语句。
我得到一个错误,“关键字'AND'附近的语法不正确。”
这是我的SQL语句
从MyTable中选择*
其中Station ='MyStation'
以及@Month>的情况9然后
(CONVERT(DATE,CommittedDate,103)BETWEEN
CAST(@Year as varchar(10))+'1001'AND CAST(@Year as varchar(10))+ REPLACE(STR(@Month,2),'','0')+'25' )
否则
(CONVERT(DATE,CommittedDate,103)BETWEEN
CAST(@Year as varchar(10))+'1001'AND CAST(@Year as varchar(10))+ REPLACE(STR(@Month,2),'','0')+'25' )
我已尝试在BETWEEN之后添加CASE,仅过滤两者之间的值,但这也不起作用。
感谢任何帮助:)
答案 0 :(得分:2)
这里你真的不需要一个案例陈述。你应该能够这样做:
select * from MyTable
where Station = 'MyStation'
and ((@Month > 9 AND
(CONVERT(DATE, CommittedDate, 103) BETWEEN
CAST(@Year as varchar(10))+ '1001' AND CAST(@Year as varchar(10))+ REPLACE(STR(@Month, 2), ' ', '0')+'25'))
OR (@Month <= 9
(CONVERT(DATE, CommittedDate, 103) BETWEEN
CAST(@Year as varchar(10))+ '1001' AND CAST(@Year as varchar(10))+ REPLACE(STR(@Month, 2), ' ', '0')+'25')))
答案 1 :(得分:1)
在您的特定示例中,您不需要(并且不应该)将其放在WHERE
开头。它可以在查询之前计算并存储到变量中。