Sql server WHERE子句中带有复杂大小写的SQL SELECT语句
我正试图从表格中选择*,但选择范围取决于输入的月份 我在WHERE子句中使用CASE来确定月份值,并选择正确的WHERE语句 然而我得到了一个错误 关键字“AND”附近的语法不正确 以下是我的SQL语句:Sql server WHERE子句中带有复杂大小写的SQL SELECT语句,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我正试图从表格中选择*,但选择范围取决于输入的月份 我在WHERE子句中使用CASE来确定月份值,并选择正确的WHERE语句 然而我得到了一个错误 关键字“AND”附近的语法不正确 以下是我的SQL语句: select * from MyTable where Station = 'MyStation' and case when @Month > 9 then (CONVERT(DATE, CommittedDate, 103) BETWEEN CAST(@Year as va
select * from MyTable
where Station = 'MyStation'
and case when @Month > 9 then
(CONVERT(DATE, CommittedDate, 103) BETWEEN
CAST(@Year as varchar(10))+ '1001' AND CAST(@Year as varchar(10))+ REPLACE(STR(@Month, 2), ' ', '0')+'25')
else
(CONVERT(DATE, CommittedDate, 103) BETWEEN
CAST(@Year as varchar(10))+ '1001' AND CAST(@Year as varchar(10))+ REPLACE(STR(@Month, 2), ' ', '0')+'25')
我曾尝试将
大小写
放在中间
之后,以过滤中间的值,但这也不起作用。在您的特定示例中,您不需要(也不应该)首先将其放在的位置。它可以在查询之前进行计算并存储到变量中。在您的特定示例中,您不需要(也不应该)首先将其放在的位置。它可以在查询之前进行计算并存储到变量中。在您的特定示例中,您不需要(也不应该)首先将其放在的位置。它可以在查询之前进行计算并存储到变量中。在您的特定示例中,您不需要(也不应该)首先将其放在的位置。它可以在查询之前进行计算并存储到变量中。这里不需要case语句。您应该能够这样做:
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')))
从MyTable中选择*
where Station='MyStation'
和((@月>9和
(转换(日期,委托日期,103)
铸造(@Year as varchar(10))+'1001'和铸造(@Year as varchar(10))+替换(STR(@Month,2),'0')+'25'))
或者(@Month您在这里不需要真正的案例陈述。您应该可以这样做:
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')))
从MyTable中选择*
where Station='MyStation'
和((@月>9和
(转换(日期,委托日期,103)
铸造(@Year as varchar(10))+'1001'和铸造(@Year as varchar(10))+替换(STR(@Month,2),'0')+'25'))
或者(@Month您在这里不需要真正的案例陈述。您应该可以这样做:
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')))
从MyTable中选择*
where Station='MyStation'
和((@月>9和
(转换(日期,委托日期,103)
铸造(@Year as varchar(10))+'1001'和铸造(@Year as varchar(10))+替换(STR(@Month,2),'0')+'25'))
或者(@Month您在这里不需要真正的案例陈述。您应该可以这样做:
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')))
从MyTable中选择*
where Station='MyStation'
和((@月>9和
(转换(日期,委托日期,103)
铸造(@Year as varchar(10))+'1001'和铸造(@Year as varchar(10))+替换(STR(@Month,2),'0')+'25'))
或者(@Month不应该说谢谢,但效果很好,我很感激。我喜欢这个解决方案:)不应该说谢谢,但效果很好,我很感激。我喜欢这个解决方案:)不应该说谢谢,但效果很好,我很感激。我喜欢这个解决方案:)不应该说谢谢,但它很有效,我很感激。我喜欢这个解决方案:)