검색 조건의 패턴 일치

LIKE 키워드는 지정한 패턴과 일치하는 문자열, 날짜, 시간 값을 검색합니다. 자세한 내용은 데이터 형식(Transact-SQL)을 참조하십시오. LIKE 키워드는 값을 비교할 패턴이 포함된 정규 식을 사용합니다. 패턴에는 검색할 문자열이 포함되며 여기에는 다음 4가지 와일드카드의 조합을 사용합니다.

와일드카드

의미

%

문자가 0개 이상인 문자열

_

단일 문자

[ ]

지정한 범위(예: [a-f])나 집합(예: [abcdef])에 속하는 한 개의 문자

[^]

지정한 범위(예: [^a - f])나 집합(예: [^abcdef])에 속하지 않는 한 개의 문자

와일드카드와 문자열을 작은따옴표로 묶습니다. 예를 들면 다음과 같습니다.

  • LIKE 'Mc%'는 Mc로 시작하는 모든 문자열을 검색합니다(예: McBadden).

  • LIKE '%inger'는 inger로 끝나는 모든 문자열을 검색합니다(예: Ringer, Stringer).

  • LIKE '%en%'는 문자열의 어느 위치에든 en이 포함된 모든 문자열을 검색합니다(예: Bennet, Green, McBadden).

  • LIKE '_heryl'은 heryl로 끝나고 6자로 된 모든 이름을 검색합니다(예: Cheryl, Sheryl).

  • LIKE '[CK]ars[eo]n'은 Carsen, Karsen, Carson, Karson을 검색합니다.

  • LIKE '[M-Z]inger'는 M에서 Z 사이의 한 문자로 시작하고 inger로 끝나는 모든 이름을 검색합니다(예: Ringer).

  • LIKE 'M[^c]%'는 M으로 시작하고 두 번째 문자가 c가 아닌 모든 이름을 검색합니다(예: MacFeather).

다음 쿼리에서는 Person 테이블에서 지역 번호가 415인 모든 전화 번호를 검색합니다.

SELECT Phone
FROM AdventureWorks2008R2.Person.Person
WHERE Phone LIKE '415%';

위의 와일드카드와 NOT LIKE를 함께 사용할 수도 있습니다. Person 테이블에서 지역 코드가 415가 아닌 전화 번호를 모두 검색하려면 다음 쿼리 중 하나를 사용합니다.

SELECT Phone
FROM AdventureWorks2008R2.Person.Person
WHERE Phone NOT LIKE '415%';

-- Or

SELECT Phone
FROM AdventureWorks2008R2.Person.Person
WHERE NOT Phone LIKE '415%';

IS NOT NULL 절을 와일드카드 및 LIKE 절과 함께 사용할 수 있습니다. 예를 들어 다음은 Person 테이블에서 전화 번호가 415 및 IS NOT NULL로 시작하는 전화 번호를 검색하는 쿼리입니다.

USE AdventureWorks2008R2;
GO
SELECT Phone
FROM Person.Person
WHERE Phone LIKE '415%' and Phone IS NOT NULL;
중요 정보중요

LIKE 키워드가 포함된 문의 결과는 설치 과정에서 선택한 정렬 순서에 따라 다릅니다. 다른 정렬 순서의 효과에 대한 자세한 내용은 데이터 정렬 작업을 참조하십시오.

text 열에서 유일하게 사용할 수 있는 WHERE 조건은 LIKE, IS NULL, PATINDEX입니다.

LIKE 없이 와일드카드만 사용하면 패턴이 아니라 상수로 해석되어 고유한 값만 나타냅니다. 다음 쿼리는 415%라는 4자로 구성된 전화 번호만 검색하고 415로 시작하는 전화 번호는 검색하지 않습니다. 상수에 대한 자세한 내용은 상수(데이터베이스 엔진)를 참조하십시오.

SELECT Phone
FROM AdventureWorks2008R2.Person.Person
WHERE Phone = '415%';

와일드카드를 사용할 때 또 한 가지 주의할 점은 성능에 주는 영향입니다. 이름이 'Smith'가 아닌 '%mith'일 경우 전화 번호부에서 찾을 때 어디에서 시작해야 할지 알 수 없는 것처럼 와일드카드가 식의 처음에 나오면 인덱스를 사용할 수 없습니다. 그러나 이름이 'Samuel%'일 경우 Samuels이든 Samuelson이든 간에 전화 번호부의 어디에서 찾아야 할지를 알 수 있는 것처럼 와일드카드가 식의 중간이나 끝에 나올 때는 인덱스를 사용할 수 있습니다.

와일드카드 문자 검색

와일드카드 문자를 검색할 수 있습니다. 일반적으로 와일드카드로 사용되는 문자를 지정하는 방법은 두 가지가 있습니다.

  • ESCAPE 키워드를 사용하여 이스케이프 문자를 정의합니다. 패턴에서 이스케이프 문자가 와일드카드 앞에 나오면 와일드카드가 문자로 해석됩니다. 예를 들어 문자열의 어느 위치에든 5%가 포함된 문자열을 검색하려면 다음을 사용합니다.

    WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
    

    위의 LIKE 절에서 처음과 끝에 나오는 백분율 기호(%)는 와일드카드로 해석되지만 슬래시(/) 다음에 나오는 백분율 기호는 % 문자로 해석됩니다.

  • 대괄호([ ])를 사용하여 와일드카드를 묶습니다. 검색 범위를 지정하지 않고 하이픈(-) 자체를 검색하려면 대괄호 내에서 하이픈을 첫 번째 문자로 사용합니다.

    WHERE ColumnA LIKE '9[-]5'
    

    다음 표에서는 대괄호로 묶인 와일드카드의 사용을 보여 줍니다.

    기호

    의미

    LIKE '5[%]'

    5%

    LIKE '5%'

    5 다음에 0개 이상의 문자열이 오는 문자열

    LIKE '[_]n'

    _n

    LIKE '_n'

    an, in, on 등

    LIKE '[a-cdf]'

    a, b, c, d 또는 f

    LIKE '[-acdf]'

    -, a, c, d 또는 f

    LIKE '[ [ ]'

    [

    LIKE ']'

    ]

LIKE로 문자열 비교를 수행하는 경우 모든 선행 및 후행 공백(공간)을 포함하여 패턴 문자열의 모든 문자가 중요합니다. LIKE 'abc '(abc 다음에 단일 공백이 옴) 문자열이 있는 행을 모두 반환하는 비교 작업이 요청되면 그 열의 값이 abc인 행(공백 없는 abc)은 반환되지 않습니다. 그러나 그 반대의 경우에는 그렇지 않습니다. 패턴과 일치되는 식에 있는 후행 공백은 무시됩니다. LIKE 'abc'(공백 없는 abc) 문자열이 있는 행을 모두 반환하는 비교 작업이 요청되면 abc로 시작하고 후행 공백이 0개 이상인 행이 모두 반환됩니다.