복붙노트

[SQL] 내가 어떻게 LIKE 연산자에서 여러 조건을 도입 할 수 있습니다

SQL

내가 어떻게 LIKE 연산자에서 여러 조건을 도입 할 수 있습니다

나는 다음과 같은 SQL 문을 작성하려는 :

select * from tbl where col like ('ABC%','XYZ%','PQR%');

나는 그것이 OR를 사용하여 수행 할 수 있습니다 알고 있습니다. 그러나 나는 더 나은 솔루션이 알고 싶어요.

해결법

  1. ==============================

    1.여기에 또 다른 방법은 다음과 같습니다

    여기에 또 다른 방법은 다음과 같습니다

    select * from tbl where col like 'ABC%'
    union
    select * from tbl where col like 'XYZ%'
    union
    select * from tbl where col like 'PQR%';
    

    여기에 확인하는 테스트 코드는 다음과 같습니다

    create table tbl (col varchar(255));
    insert into tbl (col) values ('ABCDEFG'), ('HIJKLMNO'), ('PQRSTUVW'), ('XYZ');
    select * from tbl where col like 'ABC%'
    union
    select * from tbl where col like 'XYZ%'
    union
    select * from tbl where col like 'PQR%';
    +----------+
    | col      |
    +----------+
    | ABCDEFG  |
    | XYZ      |
    | PQRSTUVW |
    +----------+
    3 rows in set (0.00 sec)
    
  2. ==============================

    2.이것은 임시 테이블의 좋은 사용합니다.

    이것은 임시 테이블의 좋은 사용합니다.

    CREATE TEMPORARY TABLE patterns (
      pattern VARCHAR(20)
    );
    
    INSERT INTO patterns VALUES ('ABC%'), ('XYZ%'), ('PQR%');
    
    SELECT t.* FROM tbl t JOIN patterns p ON (t.col LIKE p.pattern);
    

    예 패턴에서, 당신이 확신 할 수 있도록 결과에서 일단 최대 TBL의 각 행을 볼 수 있습니다, 방법의 COL보다 하나 개의 패턴보다 일치하지 수있다. 당신의 패턴이 COL이 하나 이상 일치 할 수 있도록하는 경우, 당신은 DISTINCT 쿼리 수정을 사용해야합니다.

    SELECT DISTINCT t.* FROM tbl t JOIN patterns p ON (t.col LIKE p.pattern);
    
  3. ==============================

    3.오라클 10g는 SQL의 POSIX 호환 정규 표현식의 사용을 허용 기능이 있습니다 :

    오라클 10g는 SQL의 POSIX 호환 정규 표현식의 사용을 허용 기능이 있습니다 :

    이 기능에 대한 구문 자세한 내용은 오라클 데이터베이스 SQL 참조 서를 참조하십시오.

    예제와 함께 펄의 정규 표현식을 살펴보십시오.

    코드 :

        select * from tbl where regexp_like(col, '^(ABC|XYZ|PQR)');
    
  4. ==============================

    4.

    select * from tbl where col like 'ABC%'
    or col like 'XYZ%'
    or col like 'PQR%';
    

    이 두꺼비와 파워 빌더에서 작동합니다. 나머지에 대해 알고하지 마십시오

  5. ==============================

    5.이 힘 도움말 :

    이 힘 도움말 :

    select * from tbl where col like '[ABC-XYZ-PQR]%'
    

    나는 SQL Server 2005에서이 작업을 사용했습니다 그것은했다.

  6. ==============================

    6.나는 또한 내가 일을하거나 또는 통합 쿼리를 작성하거나 회사 별처럼 여러 번 전달하는 선택의 여지가 없었 같은 요구를했다.

    나는 또한 내가 일을하거나 또는 통합 쿼리를 작성하거나 회사 별처럼 여러 번 전달하는 선택의 여지가 없었 같은 요구를했다.

    This worked for me in Oracle 11g:
    
    REGEXP_LIKE (column, 'ABC.*|XYZ.*|PQR.*'); 
    
  7. ==============================

    7.심지어 u는이 시도 할 수 있습니다

    심지어 u는이 시도 할 수 있습니다

    함수

    CREATE  FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20))
    RETURNS @Strings TABLE
    (   
      position int IDENTITY PRIMARY KEY,
      value varchar(8000)  
    )
    AS
    BEGIN
    
    DECLARE @index int
    SET @index = -1
    
    WHILE (LEN(@text) > 0)
      BEGIN 
        SET @index = CHARINDEX(@delimiter , @text) 
        IF (@index = 0) AND (LEN(@text) > 0) 
          BEGIN  
            INSERT INTO @Strings VALUES (@text)
              BREAK 
          END 
        IF (@index > 1) 
          BEGIN  
            INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))  
            SET @text = RIGHT(@text, (LEN(@text) - @index)) 
          END 
        ELSE
          SET @text = RIGHT(@text, (LEN(@text) - @index))
        END
      RETURN
    END
    

    질문

    select * from my_table inner join (select value from fn_split('ABC,MOP',','))
    as split_table on my_table.column_name like '%'+split_table.value+'%';
    
  8. ==============================

    8.사업에 매개 변수 값이 고정되지 않거나 값이 널 (null)을 기반으로 할 수있는 경우는 다음과 같은 접근 방법을 시도 할 수 있습니다.

    사업에 매개 변수 값이 고정되지 않거나 값이 널 (null)을 기반으로 할 수있는 경우는 다음과 같은 접근 방법을 시도 할 수 있습니다.

    DECLARE @DrugClassstring VARCHAR(MAX);
    SET @DrugClassstring = 'C3,C2'; -- You can pass null also
    
    ---------------------------------------------
    
    IF @DrugClassstring IS NULL 
        SET @DrugClassstring = 'C3,C2,C4,C5,RX,OT'; -- If null you can set your all conditional case that will return for all
    SELECT dn.drugclass_FK , dn.cdrugname
    FROM drugname AS dn
    INNER JOIN dbo.SplitString(@DrugClassstring, ',') class ON dn.drugclass_FK = class.[Name] -- SplitString is a a function
    

    분할 문자열 기능

    SET ANSI_NULLS ON;
    GO
    SET QUOTED_IDENTIFIER ON;
    GO
    ALTER FUNCTION [dbo].[SplitString](@stringToSplit VARCHAR(MAX),
                                       @delimeter     CHAR(1)      = ',')
    RETURNS @returnList TABLE([Name] [NVARCHAR](500))
    AS
         BEGIN
    
             --It's use in report sql, before any change concern to everyone
    
             DECLARE @name NVARCHAR(255);
             DECLARE @pos INT;
             WHILE CHARINDEX(@delimeter, @stringToSplit) > 0
                 BEGIN
                     SELECT @pos = CHARINDEX(@delimeter, @stringToSplit);
                     SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1);
                     INSERT INTO @returnList
                            SELECT @name;
                     SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos);
                 END;
             INSERT INTO @returnList
                    SELECT @stringToSplit;
             RETURN;
         END;
    
  9. ==============================

    9.고르다 * 테이블에서 WHERE COL LIKE '[0-9, A-Z] %';

    고르다 * 테이블에서 WHERE COL LIKE '[0-9, A-Z] %';

    단순히 SQL에서 등으로이 조건을 사용하면 원하는 답을 얻을 것이다

  10. from https://stackoverflow.com/questions/1387612/how-can-i-introduce-multiple-conditions-in-like-operator by cc-by-sa and MIT license