如何通过比较sql中where子句中的两个字符串来使用case语句

时间:2019-02-21 13:59:29

标签: sql sql-server

如果两个字符串相同,我需要比较两个字符串,这意味着需要一个条件,而其他条件需要另一个条件,但是此代码对我不起作用。 欢迎任何更正和建议。 到目前为止,我在这里已经尝试过了。

declare @s1 varchar(10) = '2018',@s2 varchar(10) = '2019'
Select  PersonalAbwesenheiten.PersonalNr,sum(PersonalAbwesenheiten.AnzahlTage) as totaltakenleaves from PersonalAbwesenheiten 
  Join Personal On personal.PersonalNr = PersonalAbwesenheiten.personalNr and PersonalAbwesenheiten.PersonalNr = 4 and PersonalAbwesenheiten.Status = 4
  and  PersonalAbwesenheiten.Abwesenheitstyp = 1
  where

   case when @s1 = @s2 Then

   '2019-01-01' <= DatumBis And DatumVon <= '2019-12-31'

   when @s1 <> @s2 Then
   '2018-12-30' <= DatumBis And DatumVon <= '2019-01-05'
   end


    group by PersonalAbwesenheiten.PersonalNr

1 个答案:

答案 0 :(得分:2)

您不能以这种方式使用CASE表达式。一种方法是重构您的WHERE子句以不使用CASE

WHERE
    (@s1 = @s2 AND DatumBis BETWEEN '2019-01-01' AND '2019-12-31') OR
    (@s1 <> @s2 AND DatumBis BETWEEN '2018-12-30' AND '2019-01-05')

CASE表达式的谓词,即THENELSE之后的谓词,必须是文字值,而不是逻辑表达式。