복붙노트

[SQL] WHERE 문에 대해 LIKE 및 IN을 사용하는 것이 가능?

SQL

WHERE 문에 대해 LIKE 및 IN을 사용하는 것이 가능?

나는 장소 이름의 목록을 가지고 있고 문제가 속성이 이름 뒤에 참조 번호를 가지고있는 SQL 데이터베이스에 기록에 일치하고 싶습니다. 예를 들면. "밸리 미나 P-4sdf5g ' 그것은 가능한 기록과 일치하는 IN 및 LIKE를 사용하는 것입니다

WHERE dbo.[Places].[Name] IN LIKE('Ballymena%','Banger%')

해결법

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

    1.그것은 일반적인 오해 그 구조에 대한

    그것은 일반적인 오해 그 구조에 대한

    b IN (x, y, z)
    

    있음은 (는 X, Y, Z)는 집합을 나타낸다. 그것은하지 않습니다.

    오히려위한 단지 문법 설탕입니다

    (b = x OR b = y OR b = z)
    

    SQL하지만 하나 개의 데이터 구조를 가지고 테이블을. 당신이 세트로 쿼리 검색 텍스트 값을 원하는 경우, 테이블에 넣어. 그런 다음이, 예를 들어 조건을 가입에 LIKE를 사용하여 장소 테이블에 검색 텍스트 테이블을 가입 할 수 있습니다

    WITH Places (Name)
         AS
         (
          SELECT Name
            FROM (
                  VALUES ('Ballymeade Country Club'), 
                         ('Ballymena Candles'), 
                         ('Bangers & Mash Cafe'), 
                         ('Bangebis')
                 ) AS Places (Name)
         ), 
         SearchText (search_text)
         AS
         (
          SELECT search_text
            FROM (
                  VALUES ('Ballymena'), 
                         ('Banger')
                 ) AS SearchText (search_text)
         )
    SELECT * 
      FROM Places AS P1
           LEFT OUTER JOIN SearchText AS S1
              ON P1.Name LIKE S1.search_text + '%';
    
  2. ==============================

    2.아니,하지만 당신은 사용하거나 대신 할 수 있습니다 :

    아니,하지만 당신은 사용하거나 대신 할 수 있습니다 :

    WHERE (dbo.[Places].[Name] LIKE 'Ballymena%' OR
           dbo.[Places].[Name] LIKE 'Banger%')
    
  3. ==============================

    3.물론 간단한 솔루션은 확실하지가 여기에 SQL 그러나 아마 뭔가 비슷한에 어떻게하는지 정규 표현식을 사용하는 것

    물론 간단한 솔루션은 확실하지가 여기에 SQL 그러나 아마 뭔가 비슷한에 어떻게하는지 정규 표현식을 사용하는 것

    WHERE dbo.[Places].[Name]  SIMILAR TO '(Banger|Ballymena)';
    

    또는

    WHERE dbo.[Places].[Name] REGEXP_LIKE(dbo.[Places].[Name],'(Banger|Ballymena)');
    

    그 중 하나는 일을이어야한다

  4. ==============================

    4.당신은 OR를 사용할 수 있습니다

    당신은 OR를 사용할 수 있습니다

    WHERE 
      dbo.[Places].[Name] LIKE 'Ballymena%' 
      OR dbo.[Places].[Name] LIKE 'Banger%'
    

    places.name가 항상 동일한 형식 인 경우, 또는 공간에서 문자열을 분할합니다.

    WHERE SUBSTRING(dbo.[Places].[Name], 1, CHARINDEX(dbo.[Places].[Name], ' ')) 
      IN ('Ballymena', 'Banger')
    

    데이터베이스 등으로 인덱스를 사용할 수 있습니다 때문 성능이 저하 될 수 있습니다 (와일드 카드가 끝에있는 경우 당신은 더 나은 기회가)하지만 문자열을 사용하는 대부분의 아마하지 않을 때.

  5. from https://stackoverflow.com/questions/4335359/is-it-possible-to-use-like-and-in-for-a-where-statment by cc-by-sa and MIT license