Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
Tsql T-SQLWHERE子句case语句_Tsql_Case_Where Clause - Fatal编程技术网

Tsql T-SQLWHERE子句case语句

Tsql T-SQLWHERE子句case语句,tsql,case,where-clause,Tsql,Case,Where Clause,需要一些SQL方面的小帮助。我正在使用VARCHAR值来确定在WHERE子句中使用哪种逻辑,但是在编写这个case语句时遇到了一些问题 where (CASE WHEN @p_flag = 'ATA' THEN (@p_start_ata IS NULL AND @p_end_ata IS NULL) OR (vso.poa_ata between @p_start_ata and @p_end_ata) ELSE (@p_start_atd

需要一些SQL方面的小帮助。我正在使用
VARCHAR
值来确定在WHERE子句中使用哪种逻辑,但是在编写这个case语句时遇到了一些问题

where 
   (CASE WHEN @p_flag = 'ATA' 
            THEN (@p_start_ata IS NULL AND @p_end_ata IS NULL) OR (vso.poa_ata between @p_start_ata and @p_end_ata)
         ELSE (@p_start_atd IS NULL AND @p_end_atd IS NULL) OR (vso.pol_atd between @p_start_atd and @p_end_atd)
)
第93行关键字“IS”附近的语法不正确


这可能是个小错误,但让我很沮丧。也许有更好的写作方法?谢谢

你不能那样使用
案例

它用于获取值,而不是限制。查看如何正确使用
案例



在您的情况下,您必须更改逻辑,可能需要使用
IF
,并使想要的
选择

如前所述,您不能像现在这样使用case语句。所以这可能是一个建议:

WHERE 
    (
        @p_flag = 'ATA'
        AND 
            (
                (@p_start_ata IS NULL AND @p_end_ata)
                OR (vso.poa_ata between @p_start_ata and @p_end_ata)
            )
    )
    OR
    (
        NOT @p_flag = 'ATA'
        AND 
            (
                (@p_start_atd IS NULL AND @p_end_atd IS NULL)
                OR (vso.pol_atd between @p_start_atd and @p_end_atd)
            )
    )

CASE语句只能提供值,不能提供整个代码块。你需要重新安排你的逻辑谢谢我用了这个。我正在寻找一个布尔条件,它将执行一个或另一个sql块,但不确定如何在where子句中编写它。这有帮助。@nickgowdy:没问题。很乐意帮忙:P