Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在以下情况下使用多个条件进行查询:_Sql_Sql Server_Tsql_Sql Like_Case When - Fatal编程技术网

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不带括号通常是错误的逻辑。确保您使用设计良好的测试数据来验证您的逻辑。