如果大于0,则将CHARDINDEX返回编号替换为1



我有一个查询如下:

Select 
CHARINDEX('Test_Value',STRING_AGG(FSD.Test_Value_Field, ';')) As My_Return_Value,
FROM QE_CS CS
...

如果它在聚合字符串中,它会返回一个大于0的值,但是,如果值大于0,我只希望它返回1。我试着这样使用IF

Select 
IF CHARINDEX('Test_Value',STRING_AGG(FSD.Test_Value_Field, ';')) > 0 THEN 1 ELSE 0 As My_Return_Value,
FROM QE_CS CS

但这又回来了:

关键字"IF"附近的语法不正确

很明显,我不熟悉在SQL server中使用IF-如何获得预期结果?

If语句不能在select语句中使用。像这样的用例语句
Select 
CASe when CHARINDEX('Test_Value',STRING_AGG(FSD.Test_Value_Field, ';')) > 0 THEN 1 ELSE 0 end As My_Return_Value,
FROM QE_CS CS

还有一个选项是sign()

示例

sign(CHARINDEX('Test_Value',STRING_AGG(FSD.Test_Value_Field, ';')))

Sign((将返回-1、0、1或空

你可以试试这个:

Select IIF(CHARINDEX('Test_Value',STRING_AGG(FSD.Test_Value_Field, ';')) > 0, 1, 0) As My_Return_Value FROM QE_CS CS

如果你有多个条件需要检查,CASE是更好的选择,但你也可以使用"IIF"功能,这里的官方文档

select IIF(CHARINDEX('Test_Value',STRING_AGG('ABC;Test_Value', ';')) > 0 ,1,0) from QE_CS CS 

最新更新