Sql 在where条件中添加case语句,并在then子句中提供条件语句

Sql 在where条件中添加case语句,并在then子句中提供条件语句,sql,sql-server,case,where-clause,Sql,Sql Server,Case,Where Clause,我有一个where子句,我需要在其中添加case语句,然后在中添加和否则我必须给出条件语句 我的情况是这样的 WHERE CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN convert(varchar,dt_start,103) = convert(varchar,dateadd(day,-3,getdate()),103) AND conv

我有一个
where
子句,我需要在其中添加
case
语句,然后在
中添加
否则
我必须给出条件语句

我的情况是这样的

WHERE 
    CASE
        WHEN 
        Substring(datename(dw,getdate()),1,3) = 'mon' 
        THEN convert(varchar,dt_start,103) = convert(varchar,dateadd(day,-3,getdate()),103) 
        AND  convert(varchar,dt_start,103) <= convert(varchar,dateadd(day,-2,getdate()),103)
        ELSE convert(varchar,dt_start,103) = convert(varchar,dateadd(day,-1,getdate()),103)
    END  
  • 试试这个

    WHERE 
    convert(varchar,dt_start,103)=
    CASE
        WHEN 
        Substring(datename(dw,getdate()),1,3) = 'mon' 
        THEN convert(varchar,dt_start,103) = 
        convert(varchar,dateadd(day,-3,getdate()),103) 
        ELSE convert(varchar,dt_start,103) = 
        convert(varchar,dateadd(day,-1,getdate()),103)
    END  
    
    AND
    
    convert(varchar,dt_start,103)<=
    CASE
     WHEN 
     Substring(datename(dw,getdate()),1,3) = 'mon' 
      then convert(varchar,dateadd(day,-2,getdate()),103)
      else
      --put a condition that does not filter any data (maybe)
      convert(varchar,getdate(),103)
      end
    
    在哪里
    转换(varchar,dt_start,103)=
    案例
    什么时候
    子字符串(datename(dw,getdate()),1,3)='mon'
    然后转换(varchar,dt_start,103)=
    转换(varchar,dateadd(day,-3,getdate()),103)
    ELSE转换(varchar,dt_start,103)=
    转换(varchar,dateadd(day,-1,getdate()),103)
    结束
    及
    转换(varchar,dt_start,103)
    • 试试这个

      WHERE 
      convert(varchar,dt_start,103)=
      CASE
          WHEN 
          Substring(datename(dw,getdate()),1,3) = 'mon' 
          THEN convert(varchar,dt_start,103) = 
          convert(varchar,dateadd(day,-3,getdate()),103) 
          ELSE convert(varchar,dt_start,103) = 
          convert(varchar,dateadd(day,-1,getdate()),103)
      END  
      
      AND
      
      convert(varchar,dt_start,103)<=
      CASE
       WHEN 
       Substring(datename(dw,getdate()),1,3) = 'mon' 
        then convert(varchar,dateadd(day,-2,getdate()),103)
        else
        --put a condition that does not filter any data (maybe)
        convert(varchar,getdate(),103)
        end
      
      在哪里
      转换(varchar,dt_start,103)=
      案例
      什么时候
      子字符串(datename(dw,getdate()),1,3)='mon'
      然后转换(varchar,dt_start,103)=
      转换(varchar,dateadd(day,-3,getdate()),103)
      ELSE转换(varchar,dt_start,103)=
      转换(varchar,dateadd(day,-1,getdate()),103)
      结束
      及
      
      convert(varchar,dt_start,103)试试这个:你必须根据你的要求制定两个单独的条件,记住一件事,你只能作为
      案例开始,其中a=CASE
      不能作为
      案例开始,然后a=b+c…
      或者在这种情况下,我建议使用动态查询,在这种情况下,根据不同的条件很容易操作查询

      WHERE convert(varchar,dt_start,103) =
          CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN 
              convert(varchar,dateadd(day,-3,getdate()),103) 
          ELSE 
              convert(varchar,dateadd(day,-1,getdate()),103) 
          END
      
          AND convert(varchar,dt_start,103) <= 
          CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN
              convert(varchar,dateadd(day,-2,getdate()),103)
          ELSE 
              convert(varchar,dt_start,103)
          END
      
      其中转换(varchar,dt_start,103)=
      当子字符串(datename(dw,getdate()),1,3)=“mon”时,则为大小写
      转换(varchar,dateadd(day,-3,getdate()),103)
      其他的
      转换(varchar,dateadd(day,-1,getdate()),103)
      结束
      
      并转换(varchar,dt_start,103)试试这个:你必须根据你的要求制定两个单独的条件,记住一件事,你只能作为
      案例开始,其中a=CASE
      而不是作为
      案例开始,然后a=b+c…
      或者在这种情况下,我建议使用动态查询,在这种情况下,根据不同的条件很容易操作查询

      WHERE convert(varchar,dt_start,103) =
          CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN 
              convert(varchar,dateadd(day,-3,getdate()),103) 
          ELSE 
              convert(varchar,dateadd(day,-1,getdate()),103) 
          END
      
          AND convert(varchar,dt_start,103) <= 
          CASE WHEN Substring(datename(dw,getdate()),1,3) = 'mon' THEN
              convert(varchar,dateadd(day,-2,getdate()),103)
          ELSE 
              convert(varchar,dt_start,103)
          END
      
      其中转换(varchar,dt_start,103)=
      当子字符串(datename(dw,getdate()),1,3)=“mon”时,则为大小写
      转换(varchar,dateadd(day,-3,getdate()),103)
      其他的
      转换(varchar,dateadd(day,-1,getdate()),103)
      结束
      
      和convert(varchar,dt_start,103)我看不出这在PostgreSQL或任何其他RDBMS中如何工作CASE
      是一个返回单个标量值的表达式。它不能像过程语言那样用于控制执行流。是的,它在pgsql中工作。我已经添加了有问题的pgsql where子句。我看不出这怎么可能在PostgreSQL或任何其他RDBMS中工作CASE
      是一个返回单个标量值的表达式。它不能像过程语言那样用于控制执行流。是的,它在pgsql中工作。我已经添加了有问题的pgsql where子句。感谢您的回答。感谢您的回答。