복붙노트

[SQL] SQL Server와 같은 패턴 "전체 단어 일치"검색

SQL

SQL Server와 같은 패턴 "전체 단어 일치"검색

사람이 전체 단어 만 일치하는 LIKE 패턴이 있습니까?

그것은 공백, 구두점에 대한 계정에 필요로하고 단어 경계와 같은 문자열의 시작 / 끝.

이 사용할 수없는 것처럼 나는 SQL 전체 텍스트 검색을 사용하고 있지 않다. 내가 좋아하는 트릭을 할 수있을 것입니다 때 검색 키워드 간단한에 필요한 것입니다 생각하지 않습니다. 누군가가 LIKE 패턴에 대한 전체 텍스트 검색의 성능을 테스트했습니다 그러나, 내가 듣고 관심을 가질 것입니다.

나는이 단계에있어,하지만 그것은 시작 / 워드 경계로 문자열의 끝과 일치하지 않습니다.

where DealTitle like '%[^a-zA-Z]pit[^a-zA-Z]%' 

나는이 문장 또는 한 단어로 "구덩이"가 아니라 "침"을 일치합니다.

예를 들면 DealTitle는 "절망의 구덩이"를 포함 또는 "당신의 순발력이 구덩이"또는 "구덩이"또는 수도 "구덩이." 또는 "구덩이!" 또는 그냥 "구덩이".

해결법

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

    1.전체 텍스트 인덱스는 대답이다.

    전체 텍스트 인덱스는 대답이다.

    가난한 사촌 대안이다

    '.' + column + '.' LIKE '%[^a-z]pit[^a-z]%'
    

    참고로이 _CS 데이터 정렬을 사용하지 않는 경우, A-ZA-Z에 대한 필요가 없습니다

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

    2.나는 권장되는 패턴이 시작 또는 끝에서 모든 문자가없는과 단어를 제외 생각합니다. 나는 다음과 같은 추가 기준을 사용합니다.

    나는 권장되는 패턴이 시작 또는 끝에서 모든 문자가없는과 단어를 제외 생각합니다. 나는 다음과 같은 추가 기준을 사용합니다.

    where DealTitle like '%[^a-z]pit[^a-z]%' OR 
      DealTitle like 'pit[^a-z]%' OR 
      DealTitle like '%[^a-z]pit'
    

    나는 너희들 도움이되기를 바랍니다!

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

    3.또 다른 간단한 대안 :

    또 다른 간단한 대안 :

    WHERE DealTitle like '%[^a-z]pit[^a-z]%' OR 
          DealTitle like '[^a-z]pit[^a-z]%' OR 
          DealTitle like '%[^a-z]pit[^a-z]'
    
  4. ==============================

    4.이것은 좋은 주제이고 나는 쿼리의 요소로이 전달 일부 문자열의 일부 단어를 찾을 필요가 얼마나 사람에게이 문제를 보완하고자합니다.

    이것은 좋은 주제이고 나는 쿼리의 요소로이 전달 일부 문자열의 일부 단어를 찾을 필요가 얼마나 사람에게이 문제를 보완하고자합니다.

    SELECT 
        ST.WORD, ND.TEXT_STRING
    FROM 
        [ST_TABLE] ST
    LEFT JOIN 
        [ND_TABLE] ND ON ND.TEXT_STRING LIKE '%[^a-z]' + ST.WORD + '[^a-z]%'
    WHERE 
        ST.WORD = 'STACK_OVERFLOW' -- OPTIONAL
    

    이것으로 당신은 END.TEXT 문자열에 ST.WORD의 모든 발생률을 나열 할 수 있습니다 및 절은 어떤 단어를 사용하여이를 필터링 할 WHERE 당신은을 사용할 수 있습니다.

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

    5.공간으로 문자열을 둘러싸고 이런 테스트 열을 만듭니다

    공간으로 문자열을 둘러싸고 이런 테스트 열을 만듭니다

     SELECT t.DealTitle 
     FROM yourtable t
     CROSS APPLY (SELECT testDeal = ' ' + ISNULL(t.DealTitle,'') + ' ') fx1
     WHERE fx1.testDeal LIKE '%[^a-z]pit[^a-z]%'
    
  6. ==============================

    6.당신은 단지 공백 구분 기호에 대한 조건 아래에서 사용할 수 있습니다 :

    당신은 단지 공백 구분 기호에 대한 조건 아래에서 사용할 수 있습니다 :

    (' '+YOUR_FIELD_NAME+' ') like '% doc %'
    

    그것은 빠르고 더 나은 다른 솔루션에 비해 작동합니다. 그래서 귀하의 경우는 "절망의 구덩이"또는 "구덩이 순발력"또는 "구덩이"또는 함께 잘 작동 "구덩이." 또는 그냥 "구덩이",하지만 작동 "구덩이!".

  7. ==============================

    7.당신은 당신의 SQL 쿼리에서 정규 표현식 연산자를 사용할 수 있다면 ..

    당신은 당신의 SQL 쿼리에서 정규 표현식 연산자를 사용할 수 있다면 ..

    공백, 구두점 및 시작 / 단어 경계와 같은 문자열의 끝의 조합을 찾는 경우 :

    where DealTitle regexp '(^|[[:punct:]]|[[:space:]])pit([[:space:]]|[[:punct:]]|$)'
    
  8. ==============================

    8.당신은 SQL의 전체 문자열을 검색 할 수 있습니다 :

    당신은 SQL의 전체 문자열을 검색 할 수 있습니다 :

    select * from YourTable where col1 like '%TheWord%'
    

    그런 다음 당신은 전체 단어해야한다는 추가 조건을 추가하여 반환 된 행 클라이언트 사이트를 필터링 할 수 있습니다. 예를 들어, 정규식과 일치하는 경우 :

    \bTheWord\b
    

    또 다른 옵션은 SQL Server 2005 및 이상에서 사용할 수있는 CLR 기능을 사용하는 것입니다. 즉, 정규식 서버 측을 검색 할 수있다. 이 MSDN의 artcile는 dbo.RegexMatch 기능을 설정하는 방법의 세부 사항을 가지고있다.

  9. ==============================

    9.경기를 찾기 위해 charIndex의를 사용해보십시오 :

    경기를 찾기 위해 charIndex의를 사용해보십시오 :

    Select * 
    from table 
    where charindex( 'Whole word to be searched', columnname) > 0
    
  10. from https://stackoverflow.com/questions/5444300/search-for-whole-word-match-with-sql-server-like-pattern by cc-by-sa and MIT license