在CASE WHEN中使用多个条件进行查询



我正试图找到一种最佳的方法来开发;简单的";具有某些条件的查询。

基本上,这是我试图运行的查询的示例,它是这样工作的,但我想知道是否有一个";"清洁剂";方法,因为我的完整查询中有几个case when条件

select
case 
when col_1 like '%OHUB%7E%' or col_1 like '%8E%' or col_1 like '%9E%' or col_1 not like '%10E%' 
and col_2 like '%OHUB%1E%' or col_2 like '%OHUB%2E%' or col_2 like '%OHUB%3E%' 
and col_3 like '%OHUB%11E%' or col_3 like '%OHUB%10E%'
then col_1 = 'OBJECT' 
end col_1
from table_x

我想知道我是否可以将每一列的所有条件分组,以避免重复该列。

像这样的东西:

select
case when col_1 Like ('%OHUB%7E%' or '%8E%' or '%9E%' or not Like '%10E%') 
and col_2  Like ('%OHUB%1E%' or '%OHUB%2E%' or '%OHUB%3E%')
and col_3  Like ('%OHUB%11E%' or'%OHUB%10E%')
then col_1 = 'OBJECT' 
end col_1
from table_x

我试过了,但找不到另一种工作方式

如果有很多值,可以将它们记录在#temporary/@table变量/cte中,并执行如下检查:

DECLARE @Col_1_Values TABLE
(
[value] NVARCHAR(128)
);

INSERT INTO @Col_1_Values ([value])
VALUES ('%OHUB%7E%')
,('%8E%')
,('%9E%')
DECLARE @test_string NVARCHAR(12) = 'xxx9Exxx';
SELECT IIF(EXISTS(SELECT 1 FROM @Col_1_Values WHERE @test_string LIKE [value]), 1, 0);

然后在未来,您可以简单地添加新值,而无需更改代码。

您可以结合您的条件。这样的东西:

select (case when col_1 like '%[789]E%' and
col_2 like '%OHUB%[123]E%' and
col_3 like '%OHUB%1[10]E%' 
then col_1 = 'OBJECT' 
end) col_1
from table_x

(我不了解or col_1 not like '%10E%'的条件,所以我删除了它。(

SQL Server不(直接(支持正则表达式。然而,它扩展了LIKE模式,因此它们对您想要做的事情很有用

相关内容

  • 没有找到相关文章

最新更新