복붙노트

[SQL] "LIKE"및 SQL의 "IN"의 조합이 있습니까?

SQL

"LIKE"및 SQL의 "IN"의 조합이 있습니까?

SQL I에서 (슬프게도) 종종 인해 정상화의 거의 모든 규칙을 위반 데이터베이스에 "LIKE"조건을 사용해야합니다. 지금은 그 권리를 변경할 수 없습니다. 하지만 그 질문에 무관합니다.

또한, 나는 종종 같은 조건을 사용하여 WHERE 내 SQL 문장의 가독성과 유연성 (1,1,2,3,5,8,13,21) 뭔가.

복잡한 하위 선택을 작성하지 않고이 두 가지를 결합하는 어떤 가능한 방법이 있나요?

나뿐만 무언가를 원하는 쉽게 같은 WHERE 뭔가 LIKE ( '즐 %', '% foo는 %', 'BATZ의 %')이 대신 :

WHERE something LIKE 'bla%'
OR something LIKE '%foo%'
OR something LIKE 'batz%'

나는 여기에 SQL 서버와 오라클 함께 일하고 있어요 그러나 이것은 전혀 어떤 RDBMS에 가능하면 내가 관심이 있어요.

해결법

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

    1.훨씬 덜 TSQL (SQL 서버) 또는 PLSQL (오라클)에서 SQL의 LIKE 및 IN의 어떤 조합은 없습니다. 전체 텍스트 검색 (FTS)가 권장 대안이기 때문에 그 이유의 일부입니다.

    훨씬 덜 TSQL (SQL 서버) 또는 PLSQL (오라클)에서 SQL의 LIKE 및 IN의 어떤 조합은 없습니다. 전체 텍스트 검색 (FTS)가 권장 대안이기 때문에 그 이유의 일부입니다.

    모두 오라클과 SQL 서버 FTS 구현은 키워드가 포함되어 있지만 구문은 여전히 ​​약간 다릅니다 지원합니다

    WHERE CONTAINS(t.something, 'bla OR foo OR batz', 1) > 0
    
    WHERE CONTAINS(t.something, '"bla*" OR "foo*" OR "batz*"')
    

    참고:

  2. ==============================

    2.당신이 당신의 문을 쉽게 읽을 수 있도록하려면, 당신은 (오라클 버전 10 이후부터 사용 가능) REGEXP_LIKE를 사용할 수 있습니다.

    당신이 당신의 문을 쉽게 읽을 수 있도록하려면, 당신은 (오라클 버전 10 이후부터 사용 가능) REGEXP_LIKE를 사용할 수 있습니다.

    예 테이블 :

    SQL> create table mytable (something)
      2  as
      3  select 'blabla' from dual union all
      4  select 'notbla' from dual union all
      5  select 'ofooof' from dual union all
      6  select 'ofofof' from dual union all
      7  select 'batzzz' from dual
      8  /
    
    Table created.
    

    원래 구문 :

    SQL> select something
      2    from mytable
      3   where something like 'bla%'
      4      or something like '%foo%'
      5      or something like 'batz%'
      6  /
    
    SOMETH
    ------
    blabla
    ofooof
    batzzz
    
    3 rows selected.
    

    그리고 단순 REGEXP_LIKE와 쿼리를 찾고

    SQL> select something
      2    from mytable
      3   where regexp_like (something,'^bla|foo|^batz')
      4  /
    
    SOMETH
    ------
    blabla
    ofooof
    batzzz
    
    3 rows selected.
    

    하지만 ...

    나는 때문에 그리 좋은 성능에 나 자신을 추천하지 않을 것입니다. 나는 여러 LIKE 술어로 다루고 싶어요. 그래서 예를 들면 그냥 재미 있었다.

  3. ==============================

    3.당신이 함께 붙어있어

    당신이 함께 붙어있어

    WHERE something LIKE 'bla%'
    OR something LIKE '%foo%'
    OR something LIKE 'batz%'
    

    당신은 임시 테이블을 채우는하지 않는 한 (데이터와의 와일드 카드를 포함)와 같은 조인

    FROM YourTable                y
        INNER JOIN YourTempTable  t On y.something LIKE t.something
    

    (SQL 서버 구문을 사용하여) 그것을 밖으로 시도 :

    declare @x table (x varchar(10))
    declare @y table (y varchar(10))
    
    insert @x values ('abcdefg')
    insert @x values ('abc')
    insert @x values ('mnop')
    
    insert @y values ('%abc%')
    insert @y values ('%b%')
    
    select distinct *
    FROM @x x
    WHERE x.x LIKE '%abc%' 
       or x.x LIKE '%b%'
    
    
    select distinct x.*  
    FROM @x             x
        INNER JOIN  @y  y On x.x LIKE y.y
    

    산출:

    x
    ----------
    abcdefg
    abc
    
    (2 row(s) affected)
    
    x
    ----------
    abc
    abcdefg
    
    (2 row(s) affected)
    
  4. ==============================

    4.PostgreSQL을 함께 또는 모든 형태가있다 :

    PostgreSQL을 함께 또는 모든 형태가있다 :

    WHERE col LIKE ANY( subselect )
    

    또는

    WHERE col LIKE ALL( subselect )
    

    부속 선택의 데이터를 정확히 하나의 열을 반환하는 경우.

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

    5.또 다른 해결책은, 어떤 RDBMS에 작동합니다 :

    또 다른 해결책은, 어떤 RDBMS에 작동합니다 :

    WHERE EXISTS (SELECT 1
                    FROM (SELECT 'bla%' pattern FROM dual UNION ALL
                          SELECT '%foo%'        FROM dual UNION ALL
                          SELECT 'batz%'        FROM dual)
                   WHERE something LIKE pattern)
    
  6. ==============================

    6.당신은 내부 조인 또는 위에 표시된 임시 테이블 기술 캡슐화하려는 경우 나는 TableValue 사용자 기능을 사용하는 것이 좋습니다 것입니다. 이것은 더 명확하게 비트를 읽을 수있다.

    당신은 내부 조인 또는 위에 표시된 임시 테이블 기술 캡슐화하려는 경우 나는 TableValue 사용자 기능을 사용하는 것이 좋습니다 것입니다. 이것은 더 명확하게 비트를 읽을 수있다.

    http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx : 분할 기능을 사용하면 정의

    우리가 쓸 수 나는 "물고기"라는 만든 테이블을 기반으로 다음 (INT 아이디, VARCHAR (50) 이름)

    SELECT Fish.* from Fish 
        JOIN dbo.Split('%ass,%e%',',') as Splits 
        on Name like Splits.items  //items is the name of the output column from the split function.
    

    출력

    1   Bass
    2   Pike
    7   Angler
    8   Walleye
    
  7. ==============================

    7.한 가지 방법은 이런 그에게 (SQL 서버 또는 테이블 변수)를 임시 테이블에 상태를 저장하고 참여하는 것입니다 :

    한 가지 방법은 이런 그에게 (SQL 서버 또는 테이블 변수)를 임시 테이블에 상태를 저장하고 참여하는 것입니다 :

    SELECT t.SomeField
    FROM YourTable t
       JOIN #TempTableWithConditions c ON t.something LIKE c.ConditionValue
    
  8. ==============================

    8.내부 대신 조인을 사용 :

    내부 대신 조인을 사용 :

    SELECT ...
    FROM SomeTable
    JOIN
    (SELECT 'bla%' AS Pattern 
    UNION ALL SELECT '%foo%'
    UNION ALL SELECT 'batz%'
    UNION ALL SELECT 'abc'
    ) AS Patterns
    ON SomeTable.SomeColumn LIKE Patterns.Pattern
    
  9. ==============================

    9.테라 데이타는 같은 모든 지원 / 구문 :

    테라 데이타는 같은 모든 지원 / 구문 :

    jOOQ 버전 3.12.0 지원하는 구문이 :

    추가 합성 [NOT] LIKE ANY와 [NOT] LIKE 모든 사업자

    PostgreSQL의 LIKE / ILIKE ANY (ARRAY []) :

    SELECT *
    FROM t
    WHERE c LIKE ANY (ARRAY['A%', '%B']);
    

    DB <> 바이올린 데모

  10. ==============================

    10.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+'%';
    
  11. ==============================

    11.나는 정규식의 목록 쓴 다음과 같이 사용, 간단한 솔루션, 최소한의 PostgreSQL에서 그 작품이있다. 다음 예는리스트의 일부를 식별 항생제 찾고있다 :

    나는 정규식의 목록 쓴 다음과 같이 사용, 간단한 솔루션, 최소한의 PostgreSQL에서 그 작품이있다. 다음 예는리스트의 일부를 식별 항생제 찾고있다 :

    select *
    from database.table
    where lower(drug_name) like any ('{%cillin%,%cyclin%,%xacin%,%mycine%,%cephal%}')
    
  12. ==============================

    12.나는 또한 그런 일에 대해 궁금 해서요. 난 그냥 SUBSTRING과 IN의 조합을 사용하여 테스트는 이런 종류의 문제에 대한 효과적인 솔루션입니다. 아래의 쿼리를보십시오 :

    나는 또한 그런 일에 대해 궁금 해서요. 난 그냥 SUBSTRING과 IN의 조합을 사용하여 테스트는 이런 종류의 문제에 대한 효과적인 솔루션입니다. 아래의 쿼리를보십시오 :

    Select * from TB_YOUR T1 Where SUBSTRING(T1.Something, 1,3) IN ('bla', 'foo', 'batz')
    
  13. ==============================

    13.오라클에서는 다음과 같은 방법으로 컬렉션을 사용할 수 있습니다 :

    오라클에서는 다음과 같은 방법으로 컬렉션을 사용할 수 있습니다 :

    WHERE EXISTS (SELECT 1
                    FROM TABLE(ku$_vcnt('bla%', '%foo%', 'batz%'))
                   WHERE something LIKE column_value)
    

    여기에 내가 미리 정의 된 집합 형 구 $의 _vcnt을 사용했지만,이 같은 당신의 자신의 경로를 선언 할 수 있습니다 :

    CREATE TYPE my_collection AS TABLE OF VARCHAR2(4000);
    
  14. ==============================

    14.SQL Server의 경우 당신은 동적 SQL에 의존 할 수 있습니다.

    SQL Server의 경우 당신은 동적 SQL에 의존 할 수 있습니다.

    이러한 상황에서 대부분의 시간 동안 당신은 데이터베이스에서 일부 데이터를 기반으로 IN 절의 매개 변수가 있습니다.

    아래의 예는 약간의 "강제"입니다, 그러나 이것은 기존 데이터베이스에서 발견 된 다양한 실제 사례를 일치시킬 수 있습니다.

    당신이 사람의 이름은 FIRSTNAME + ''+ 성 같은 단일 필드으로 PersonName에 저장되어있는 테이블의 사람이 있다고 가정. 당신은 테이블 NamesToSelect에 필드 NameToSelect에 저장 첫번째 이름 목록에서 모든 사람을 선택해야, 플러스 몇 가지 추가 기준 (성별, 생년월일 등의 필터링 등)

    다음과 같이 그것을 할 수 있습니다

    -- @gender is nchar(1), @birthDate is date 
    
    declare 
      @sql nvarchar(MAX),
      @subWhere nvarchar(MAX)
      @params nvarchar(MAX)
    
    -- prepare the where sub-clause to cover LIKE IN (...)
    -- it will actually generate where clause PersonName Like 'param1%' or PersonName Like 'param2%' or ...   
    set @subWhere = STUFF(
      (
        SELECT ' OR PersonName like ''' + [NameToSelect] + '%''' 
            FROM [NamesToSelect] t FOR XML PATH('')
      ), 1, 4, '')
    
    -- create the dynamic SQL
    set @sql ='select 
          PersonName
          ,Gender
          ,BirstDate    -- and other field here         
      from [Persons]
      where 
        Gender = @gender
        AND BirthDate = @birthDate
        AND (' + @subWhere + ')'
    
    set @params = ' @gender nchar(1),
      @birthDate Date'     
    
    EXECUTE sp_executesql @sql, @params,    
      @gender,  
      @birthDate
    
  15. ==============================

    15.그것은 내가 아는까지로 SQL 서버 2008을 작동하지만, 나는 이것에 대한 해결책을 가지고 있습니다. 난 당신이 절처럼를 사용하여 '가상'테이블에 가입 https://stackoverflow.com/a/7285095/894974에서 설명하는 행 생성자를 사용할 수 있음을 발견했다. 그런 다음 더 복잡한 소리는, 모습입니다 :

    그것은 내가 아는까지로 SQL 서버 2008을 작동하지만, 나는 이것에 대한 해결책을 가지고 있습니다. 난 당신이 절처럼를 사용하여 '가상'테이블에 가입 https://stackoverflow.com/a/7285095/894974에서 설명하는 행 생성자를 사용할 수 있음을 발견했다. 그런 다음 더 복잡한 소리는, 모습입니다 :

    SELECT [name]
      ,[userID]
      ,[name]
      ,[town]
      ,[email]
    FROM usr
    join (values ('hotmail'),('gmail'),('live')) as myTable(myColumn) on email like '%'+myTable.myColumn+'%' 
    

    이 목록에서 제공하는 것과 같은 전자 메일 ADRES 모든 사용자가 발생합니다. 이 사람에게 사용의 희망. 문제는 나에게 잠시 동안 괴롭 히고 있었다.

  16. ==============================

    16.2016을 시작으로, SQL Server는 STRING_SPLIT 기능을 포함하고 있습니다. 나는 SQL 서버 v17.4을 사용하고 있는데 나를 위해 일이있어 :

    2016을 시작으로, SQL Server는 STRING_SPLIT 기능을 포함하고 있습니다. 나는 SQL 서버 v17.4을 사용하고 있는데 나를 위해 일이있어 :

    DECLARE @dashboard nvarchar(50)
    SET @dashboard = 'P1%,P7%'
    
    SELECT * from Project p
    JOIN STRING_SPLIT(@dashboard, ',') AS sp ON p.ProjectNumber LIKE sp.value
    
  17. ==============================

    17.당신이 MySQL을 사용하는 경우 당신이 얻을 수있는 가장 가까운 전체 텍스트 검색입니다 :

    당신이 MySQL을 사용하는 경우 당신이 얻을 수있는 가장 가까운 전체 텍스트 검색입니다 :

    전체 텍스트 검색, MySQL의 문서

  18. ==============================

    18.쉼표를위한이 작품은 값을 분리

    쉼표를위한이 작품은 값을 분리

    DECLARE @ARC_CHECKNUM VARCHAR(MAX)
    SET @ARC_CHECKNUM = 'ABC,135,MED,ASFSDFSF,AXX'
    SELECT ' AND (a.arc_checknum LIKE ''%' + REPLACE(@arc_checknum,',','%'' OR a.arc_checknum LIKE ''%') + '%'')''
    

    가 평가 :

     AND (a.arc_checknum LIKE '%ABC%' OR a.arc_checknum LIKE '%135%' OR a.arc_checknum LIKE '%MED%' OR a.arc_checknum LIKE '%ASFSDFSF%' OR a.arc_checknum LIKE '%AXX%')
    

    당신이 인덱스를 사용하려면 먼저 '%'문자를 생략해야합니다.

  19. ==============================

    19.오라클 RBDMS에서는 REGEXP_LIKE 함수를 사용하여이 동작을 얻을 수 있습니다.

    오라클 RBDMS에서는 REGEXP_LIKE 함수를 사용하여이 동작을 얻을 수 있습니다.

    문자열 세 가지 목록의 발현에있는 경우 다음 코드는 테스트 할 일 | 두 | 세 | 사 | 오 (이 파이프에 "|"기호 수단 OR 논리 연산).

    SELECT 'Success !!!' result
    FROM dual
    WHERE REGEXP_LIKE('three', 'one|two|three|four|five');
    
    RESULT
    ---------------------------------
    Success !!!
    
    1 row selected.
    

    식을 선행하는 것은 동일합니다 :

    three=one OR three=two OR three=three OR three=four OR three=five
    

    그래서 성공합니다.

    한편, 다음 테스트가 실패합니다.

    SELECT 'Success !!!' result
    FROM dual
    WHERE REGEXP_LIKE('ten', 'one|two|three|four|five');
    
    no rows selected
    

    10g 버전부터 오라클에서 사용할 수있는 정규 표현식 (REGEXP_ *)에 관련된 여러 가지 기능이 있습니다. 당신이 오라클 개발자 및 관심이 주제 인 경우이 오라클 데이터베이스와 정규 표현식을 사용하여 시작하는 좋은해야한다.

  20. ==============================

    20.이 같은 조합을 생각할 수있다 :

    이 같은 조합을 생각할 수있다 :

    SELECT  * 
    FROM    table t INNER JOIN
    (
      SELECT * FROM (VALUES('bla'),('foo'),('batz')) AS list(col)
    ) l ON t.column  LIKE '%'+l.Col+'%'
    

    당신이 당신의 목표 테이블에 대한 전체 텍스트 인덱스를 정의한 경우에 당신은이 대안을 사용할 수 있습니다 :

    SELECT  * 
    FROM    table t
    WHERE CONTAINS(t.column, '"bla*" OR "foo*" OR "batz*"')
    
  21. ==============================

    21.이 같은 무응답 :

    이 같은 무응답 :

    SELECT * FROM table WHERE something LIKE ('bla% %foo% batz%')
    

    오라클에서 아무 문제 없습니다.

  22. ==============================

    22.테라 데이타에서 당신이 좋아하는 사용할 수있는 ( '% ABC %', '% PQR %', '% XYZ %'). 다음은 나를 위해 동일한 결과를 생산하고있다 예입니다

    테라 데이타에서 당신이 좋아하는 사용할 수있는 ( '% ABC %', '% PQR %', '% XYZ %'). 다음은 나를 위해 동일한 결과를 생산하고있다 예입니다

    --===========
    --  CHECK ONE
    --===========
    SELECT *
    FROM Random_Table A
    WHERE (Lower(A.TRAN_1_DSC) LIKE ('%american%express%centurion%bank%')
    OR Lower(A.TRAN_1_DSC) LIKE ('%bofi%federal%bank%')
    OR Lower(A.TRAN_1_DSC) LIKE ('%american%express%bank%fsb%'))
    
    ;
    --===========
    --  CHECK TWO
    --===========
    SELECT *
    FROM Random_Table  A
    WHERE Lower(A.TRAN_1_DSC) LIKE ANY 
    ('%american%express%centurion%bank%',
    '%bofi%federal%bank%',
    '%american%express%bank%fsb%')
    
  23. ==============================

    23.나는 이것이 매우 늦게 알아,하지만 난 비슷한 상황이 있었다. 트릭 일 것이다 나는 많은 매개 변수를 허용 내가 가지고있는 저장 프로 시저의 집합에 대한 "좋아요에서"연산자가 필요하고 여러 RDBMS 시스템에서 데이터를 집계 이러한 매개 변수를 사용하여 어떤 RDBMS 별, 그러나 저장 프로 시저 및 함수 우리는 각 RDBMS에 대한 전체 SQL 문을 생성하는 기능을 T-SQL을 사용할 수 있도록, MS SQL 서버에서 실행되지만 출력 필요로하는 것은 상당히 RDBMS 독립적.

    나는 이것이 매우 늦게 알아,하지만 난 비슷한 상황이 있었다. 트릭 일 것이다 나는 많은 매개 변수를 허용 내가 가지고있는 저장 프로 시저의 집합에 대한 "좋아요에서"연산자가 필요하고 여러 RDBMS 시스템에서 데이터를 집계 이러한 매개 변수를 사용하여 어떤 RDBMS 별, 그러나 저장 프로 시저 및 함수 우리는 각 RDBMS에 대한 전체 SQL 문을 생성하는 기능을 T-SQL을 사용할 수 있도록, MS SQL 서버에서 실행되지만 출력 필요로하는 것은 상당히 RDBMS 독립적.

    이것은 내가 순간 SQL의 블록으로 (예 : 매개 변수가 저장 프로 시저에 들어오는)는 구분 된 문자열을 설정하기 위해 마련 한 것입니다. 내가 전화를 "LIKE IN"에 대한 "이끼". 그것을 얻을?

    Lichen.syal

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =======================================================================
    -- Lichen - Scalar Valued Function
    -- Returns nvarchar(512) of "LIKE IN" results.  See further documentation.
    -- CREATOR: Norman David Cooke
    -- CREATED: 2020-02-05
    -- UPDATED:
    -- =======================================================================
    CREATE OR ALTER FUNCTION Lichen 
    (
        -- Add the parameters for the function here
        @leadingAnd bit = 1,
        @delimiter nchar(1) = ';',
        @colIdentifier nvarchar(64),
        @argString nvarchar(256)
    )
    RETURNS nvarchar(512)
    AS
    BEGIN
        -- Declare the return variable here
        DECLARE @result nvarchar(512)
    
        -- set delimiter to detect (add more here to detect a delimiter if one isn't provided)
        DECLARE @delimit nchar(1) = ';'
        IF NOT @delimiter = @delimit 
            SET @delimit = @delimiter
    
    
        -- check to see if we have any delimiters in the input pattern
        IF CHARINDEX(@delimit, @argString) > 1  -- check for the like in delimiter
        BEGIN  -- begin 'like in' branch having found a delimiter
            -- set up a table variable and string_split the provided pattern into it.
            DECLARE @lichenTable TABLE ([id] [int] IDENTITY(1,1) NOT NULL, line NVARCHAR(32))
            INSERT INTO @lichenTable SELECT * FROM STRING_SPLIT(@argString, ';')
    
            -- setup loop iterators and determine how many rows were inserted into lichen table
            DECLARE @loopCount int = 1
            DECLARE @lineCount int 
            SELECT @lineCount = COUNT(*) from @lichenTable
    
            -- select the temp table (to see whats inside for debug)
            --select * from @lichenTable
    
            -- BEGIN AND wrapper block for 'LIKE IN' if bit is set
            IF @leadingAnd = 1
                SET @result = ' AND ('
            ELSE
                SET @result = ' ('
    
            -- loop through temp table to build multiple "LIKE 'x' OR" blocks inside the outer AND wrapper block
            WHILE ((@loopCount IS NOT NULL) AND (@loopCount <= @lineCount))
            BEGIN -- begin loop through @lichenTable
                IF (@loopcount = 1) -- the first loop does not get the OR in front
                    SELECT @result = CONCAT(@result, ' ', @colIdentifier, ' LIKE ''', line, '''') FROM @lichenTable WHERE id = @loopCount
                ELSE  -- but all subsequent loops do
                    SELECT @result = CONCAT(@result, ' OR ', @colIdentifier, ' LIKE ''', line, '''') FROM @lichenTable WHERE id = @loopCount
                SET @loopcount = @loopCount + 1     -- increment loop
            END -- end loop through @lichenTable
    
            -- set final parens after lichenTable loop
            SET @result = CONCAT(@result, ' )')
        END  -- end 'like in' branch having found a delimiter
        ELSE -- no delimiter was provided
        BEGIN   -- begin "no delimiter found" branch
            IF @leadingAnd = 1 
                SET @result = CONCAT(' AND ', @colIdentifier, ' LIKE ''' + @argString + '''')
            ELSE
                SET @result = CONCAT(' ', @colIdentifier, ' LIKE ''' + @argString + '''')
        END     -- end "no delimiter found" branch
    
        -- Return the result of the function
        RETURN @result
    END  -- end lichen function
    
    GO
    

    구분 기호 검출이 가능하게 계획되어 있지만, 세미콜론 이제 기본적으로 당신은 거기에 기본을 넣을 수 있습니다. 이 버그는 아마이 있습니다. @leadingAnd 매개 변수는 다른 WHERE 절 추가로 친절에 맞도록 당신이 블록의 앞에 선두 "AND"넣어할지 여부를 결정하기 위해 조금 값입니다.

    (argString의 구분 포함) 사용 예제

    SELECT [dbo].[Lichen] (
       default        -- @leadingAND, bit, default: 1
      ,default        -- @delimiter, nchar(1), default: ';'
      ,'foo.bar'      -- @colIdentifier, nvarchar(64), this is the column identifier
      ,'01%;02%;%03%' -- @argString, nvarchar(256), this is the input string to parse "LIKE IN" from
    )
    GO
    

    포함하는 NVARCHAR (512)를 반환합니다 :

     AND ( foo.bar LIKE '01%' OR foo.bar LIKE '02%' OR foo.bar LIKE '%03%' ) 
    

    입력이 구분 기호를 포함하지 않는 경우에도 블록을 건너 뜁니다 :

    (argString의 구분없이) 사용 예제

    SELECT [dbo].[Lichen] (
       default        -- @leadingAND, bit, default: 1
      ,default        -- @delimiter, nchar(1), default: ';'
      ,'foo.bar'      -- @colIdentifier, nvarchar(64), this is the column identifier
      ,'01%'          -- @argString, nvarchar(256), this is the input string to parse "LIKE IN" from
    )
    GO
    

    포함하는 NVARCHAR (512)를 반환합니다 :

     AND foo.bar LIKE '01%'
    

    나는 (눈부시게 명백한 또는 기타) 뭔가 댓글 연락 주시기 바랍니다 간과 한 그렇다면,이 작업을 계속하겠습니다.

  24. ==============================

    24.이 작업을 수행

    이 작업을 수행

    WHERE something + '%' in ('bla', 'foo', 'batz')
    OR '%' + something + '%' in ('tra', 'la', 'la')
    

    또는

    WHERE something + '%' in (select col from table where ....)
    
  25. from https://stackoverflow.com/questions/3014940/is-there-a-combination-of-like-and-in-in-sql by cc-by-sa and MIT license