• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 1. 함수와 연산자 참조
    2. 식 평가 형식 변환
    3. 연산자
    4. 제어 흐름 함수
    5. 문자열 함수
    1. 문자열 비교 함수
    2. 정규​​ 표현식
    6. 수치 함수와 연산자
    7. 날짜 및 시간 함수
    8. MySQL에서 사용되는 달력
    9. Full-Text 검색 기능
    10. 캐스트 함수와 연산자
    11. XML 함수
    12. 비트 함수
    13. 암호화 함수와 압축 함수
    14. 정보 함수
    15. 공간 분석 함수
    16. 글로벌 트랜잭션 ID와 함께 사용되는 함수
    17. MySQL Enterprise Encryption 기능
    18. 기타 함수
    19. GROUP BY 절에서 사용되는 함수와 수식
    20. 정밀 계산
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

12.5.1 문자열 비교 함수

표 12.8 문자열 비교 연산자

이름 설명
LIKE 단순한 패턴 일치
NOT LIKE 단순한 패턴 일치의 부정
STRCMP() 2 개의 문자열을 비교합니다

문자열 함수에 인수로 이진 문자열이 지정되어있는 경우, 결과 문자열을 바이너리 문자열입니다. 문자열로 변환 된 숫자는 이진 문자열로 처리됩니다. 비교 만이 영향을받습니다.

일반적으로 문자열 비교 식으로 대소 문자를 구분하는 경우는 대소 문자를 구분하는 방법으로 비교가 실행됩니다.

  • expr LIKE pat [ESCAPE ' escape_char ']

    SQL의 단순한 정규 표현 비교를 사용한 패턴 매칭. 1 ( TRUE ) 또는 0 ( FALSE )을 리턴합니다. expr 또는 pat 중 하나가 NULL 이면 결과도 NULL 입니다.

    패턴은 리터럴 문자열 일 필요는 없습니다. 예를 들어, 문자열 식이나 테이블 컬럼으로 지정할 수 있습니다.

    SQL 표준에서는 LIKE 는 문자마다 일치를 실행하기 위해 = 비교 연산자와는 다른 결과가 생성 될 수 있습니다.

    mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
    +-----------------------------------------+
    | 'ä' LIKE 'ae' COLLATE latin1_german2_ci |
    +-----------------------------------------+
    |                                       0 |
    +-----------------------------------------+
    mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
    +--------------------------------------+
    | 'ä' = 'ae' COLLATE latin1_german2_ci |
    +--------------------------------------+
    |                                    1 |
    +--------------------------------------+
    

    특히 후행 공백은 중요합니다. 그러나 = 연산자를 사용하여 실행되는 CHAR 과 VARCHAR 비교에는 적용되지 않습니다.

    mysql> SELECT 'a' = 'a ', 'a' LIKE 'a ';
    +------------+---------------+
    | 'a' = 'a ' | 'a' LIKE 'a ' |
    +------------+---------------+
    |          1 |             0 |
    +------------+---------------+
    1 row in set (0.00 sec)
    

    LIKE 는 패턴에서 두 개의 와일드 카드 문자를 사용할 수 있습니다.

    문자 설명
    % 0 개의 문자도 포함 해, 임의의 수의 문자와 일치합니다
    _ 정확히 하나의 문자와 일치합니다
     mysql> SELECT 'David!' LIKE 'David_';
             -> 1
     mysql> SELECT 'David!' LIKE '%D%v%';
             -> 1
    

    와일드 카드 문자의 리터럴 인스턴스를 테스트하려면 그 전에 이스케이프 문자를 지정합니다. ESCAPE 문자를 지정하지 않으면 " \ "가정됩니다.

    문자열 설명
    \% 하나의 ' % '문자와 일치합니다
    \_ 1 개의 " _ "문자와 일치합니다
     mysql> SELECT 'David!' LIKE 'David\_';
             -> 0
     mysql> SELECT 'David_' LIKE 'David\_';
             -> 1
    

    다른 이스케이프 문자를 지정하려면 ESCAPE 절을 사용합니다.

     mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
             -> 1
    

    이스케이프 시퀀스가​​ 비어하거나 문자의 길이하게하십시오. 실행시에 식은 상수로 평가 될 필요가 있습니다. NO_BACKSLASH_ESCAPES SQL 모드가 활성화되어있는 경우 순서를 비워 둘 수 없습니다.

    다음 두 문장은 피연산자 중 하나가 이진 문자열 인 경우를 제외하고 문자열 비교는 대소 문자를 구분하지 않는 것을 보여줍니다.

     mysql> SELECT 'abc' LIKE 'ABC';
             -> 1
     mysql> SELECT 'abc' LIKE BINARY 'ABC';
             -> 0
    

    MySQL은 숫자 식으로 LIKE 이 허용됩니다. (이것은 표준 SQL의 LIKE 의 확장입니다.)

     mysql> SELECT 10 LIKE '1%';
             -> 1
    
    참고

    MySQL에서 문자열 C의 이스케이프 구문 (예를 들어, 개행 문자를 나타 내기 위해 " \n ")를 사용하고 있기 때문에, LIKE 문자열에서 사용되는 " \ "모두 이중으로 지정해야합니다 . 예를 들어, " \n "를 검색하려면" \\n "로 지정합니다. " \ "를 검색하려면" \\\\ "로 지정합니다. 이것은 backslash는 파서에 의해 한 번 삭제 된 패턴 일치가 실행되는 경우에도 다시 제거되는 결과 일치되는 백 슬래시는 하나 밖에 남지 않기 때문입니다.

    예외 : 패턴 문자열의 끝에서 백 슬래시 " \\ "라고 지정할 수 있습니다. 문자열의 끝에서 탈출 뒤에 아무것도 없기 때문에 백 슬래시 자체를 나타냅니다. 테이블에 다음 값이 포함된다고 가정합니다.

    mysql> SELECT filename FROM t1;
    +--------------+
    | filename     |
    +--------------+
    | C:           | 
    | C:\          | 
    | C:\Programs  | 
    | C:\Programs\ | 
    +--------------+
    

    백 슬래시로 끝나는 값을 테스트하려면 다음 패턴 중 하나를 사용하여 값을 매칭 할 수 있습니다.

    mysql> SELECT filename, filename LIKE '%\\' FROM t1;
    +--------------+---------------------+
    | filename     | filename LIKE '%\\' |
    +--------------+---------------------+
    | C:           |                   0 | 
    | C:\          |                   1 | 
    | C:\Programs  |                   0 | 
    | C:\Programs\ |                   1 | 
    +--------------+---------------------+
    
    mysql> SELECT filename, filename LIKE '%\\\\' FROM t1;
    +--------------+-----------------------+
    | filename     | filename LIKE '%\\\\' |
    +--------------+-----------------------+
    | C:           |                     0 | 
    | C:\          |                     1 | 
    | C:\Programs  |                     0 | 
    | C:\Programs\ |                     1 | 
    +--------------+-----------------------+
    
  • expr NOT LIKE pat [ESCAPE ' escape_char ']

    이것은 NOT ( expr LIKE pat [ESCAPE ' escape_char ']) 와 같습니다.

    참고

    NULL 을 포함 컬럼의 NOT LIKE 비교를 수반 집계 쿼리는 의외의 결과가 생성 될 수 있습니다. 예를 들어, 다음 테이블과 데이터를 검토하십시오.

     CREATE TABLE foo (bar VARCHAR (10));
    
     INSERT INTO foo VALUES (NULL) (NULL);
    

    쿼리 SELECT COUNT(*) FROM foo WHERE bar LIKE '%baz%'; 는 0 을 반환합니다. SELECT COUNT(*) FROM foo WHERE bar NOT LIKE '%baz%'; 는 2 를 반환한다고 가정합니다. 그러나 사실은 다릅니다. 두 번째 쿼리는 0 을 반환합니다. 이것은 expr 의 값에 관계없이 NULL NOT LIKE expr 는 항상 NULL 을 반환하기 때문입니다. NULL 을 수반 집계 쿼리 및 NOT RLIKE 또는 NOT REGEXP 을 사용하는 비교에서도 마찬가지입니다. 이러한 경우에는 다음과 같이 ( AND 대신) OR 를 사용하여 NOT NULL 을 명시 적으로 테스트해야합니다.

     SELECT COUNT (*) FROM foo WHERE bar NOT LIKE '% baz %'OR bar IS NULL;
    
  • STRCMP( expr1 , expr2 )

    STRCMP() 은 문자열이 같으면 0 을 돌려 주어, 현재의 정렬 순서에 따라 첫 번째 인수가 두 번째보다 작은 경우는 -1 , 그렇지 않으면 1 을 반환합니다.

     mysql> SELECT STRCMP('text', 'text2');
             -> -1
     mysql> SELECT STRCMP('text2', 'text');
             -> 1
     mysql> SELECT STRCMP('text', 'text');
             -> 0
    

    STRCMP() 는 인수의 데이터 정렬을 사용하여 비교를 수행합니다.

    mysql> SET @s1 = _latin1 'x' COLLATE latin1_general_ci;
    mysql> SET @s2 = _latin1 'X' COLLATE latin1_general_ci;
    mysql> SET @s3 = _latin1 'x' COLLATE latin1_general_cs;
    mysql> SET @s4 = _latin1 'X' COLLATE latin1_general_cs;
    mysql> SELECT STRCMP(@s1, @s2), STRCMP(@s3, @s4);
    +------------------+------------------+
    | STRCMP(@s1, @s2) | STRCMP(@s3, @s4) |
    +------------------+------------------+
    |                0 |                1 |
    +------------------+------------------+
    

    데이터 정렬 호환성이없는 경우에는 기타와의 호환성을 유지하기 위해 인수 중 하나를 변환해야합니다. 섹션 10.1.7.5 "식의 데이터 정렬" 을 참조하십시오.

    mysql> SELECT STRCMP(@s1, @s3);
    ERROR 1267 (HY000): Illegal mix of collations (latin1_general_ci,IMPLICIT)
    and (latin1_general_cs,IMPLICIT) for operation 'strcmp'
    mysql> SELECT STRCMP(@s1, @s3 COLLATE latin1_general_ci);
    +--------------------------------------------+
    | STRCMP(@s1, @s3 COLLATE latin1_general_ci) |
    +--------------------------------------------+
    |                                          0 |
    +--------------------------------------------+
    


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved