Sql 在以下情况下使用多个条件进行查询:
我正试图找到一种开发“简单”查询的最佳方法,该查询具有一些条件 基本上,这是我试图运行的查询的示例,它是这样工作的,但我想知道是否有一种“更干净”的方法来执行它,因为在我的完整查询中有几个Sql 在以下情况下使用多个条件进行查询:,sql,sql-server,tsql,sql-like,case-when,Sql,Sql Server,Tsql,Sql Like,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 l
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
我尝试过,但找不到另一种有效的方法如果有很多值,您可以将它们记录在#临时/@表变量/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
(我不理解或列1不喜欢“%10E%”
条件,因此我将其删除。)
SQL Server不(直接)支持正则表达式。但是,它扩展了类似于模式的
,因此它们对您想要做的事情很有用。这是个好主意,感谢@gotqn混合使用AND和OR不带括号通常是错误的逻辑。确保您使用设计良好的测试数据来验证您的逻辑。