我正试图找到一种最佳的方法来开发;简单的";具有某些条件的查询。
基本上,这是我试图运行的查询的示例,它是这样工作的,但我想知道是否有一个";"清洁剂";方法,因为我的完整查询中有几个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
模式,因此它们对您想要做的事情很有用