Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server WHERE子句中带有复杂大小写的SQL SELECT语句_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql server WHERE子句中带有复杂大小写的SQL SELECT语句

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

我正试图从表格中选择*,但选择范围取决于输入的月份

我在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 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不应该说谢谢,但效果很好,我很感激。我喜欢这个解决方案:)不应该说谢谢,但效果很好,我很感激。我喜欢这个解决方案:)不应该说谢谢,但效果很好,我很感激。我喜欢这个解决方案:)不应该说谢谢,但它很有效,我很感激。我喜欢这个解决方案:)