我遇到以下问题。看看这部分查询
inner join tObjClassifier azoc WITH (NOLOCK index=XAK1tDepClassifier)
on azoc.ObjType = 8
and azoc.ParentID = @ObjClassifierID
and azoc.Brief = azfo.Brief
and case
when PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param) is null then azn.NodeType = 2
else PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param)>0
end
在这里,我对这部分感兴趣
and case
when PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param) is null then azn.NodeType = 2
else PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param)>0
end
如何在不出错的情况下完成此部分。简而言之,如果条件PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param)>0
不满意,忽略此条件并使用此azn.NodeType = 2
条件。感谢。
我们也可以重新排列上述条件:
and case
when ltrim(rtrim(azn.Brief)) = azoc.Param is null then azn.NodeType = 2
else ltrim(rtrim(azn.Brief)) = azoc.Param)
end
答案 0 :(得分:1)
PATINDEX返回指定表达式中第一次出现模式的起始位置,如果未找到模式则返回零。因此,请尝试使用OR
条件:
...
and azoc.Brief = azfo.Brief
and
(
(PATINDEX( ('%' + ltrim(rtrim(azn.Brief)) + '%' ) , azoc.Param)>0)
OR
(azn.NodeType = 2)
)