• 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. 문자열 함수
    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.10 캐스트 함수와 연산자

표 12.14 캐스트 함수

이름 설명
BINARY 문자열을 바이너리 문자열로 변환합니다
CAST() 값을 특정 형태로 캐스팅합니다
CONVERT() 값을 특정 형태로 캐스팅합니다

  • BINARY

    BINARY 연산자는 연속적인 문자열을 바이너리 문자열로 변환합니다. 이것은 컬럼의 비교를 문자별로하는 것이 아니라 바이트마다 강제로 실행시키는 간단한 방법입니다. 그러면 열이 BINARY 또는 BLOB 로 정의되지 않은 경우에도 비교에서 대소 문자를 구분합니다. 또한, BINARY 는 말미의 공백이 중요합니다.

     mysql> SELECT 'a' = 'A';
             -> 1
     mysql> SELECT BINARY 'a' = 'A';
             -> 0
     mysql> SELECT 'a' = 'a ';
             -> 1
     mysql> SELECT BINARY 'a' = 'a ';
             -> 0
    

    비교시 BINARY 의해 연산 전체가 영향을받습니다. 이 같은 결과를 가질 피연산자 앞에 지정할 수 있습니다.

    BINARY str 은 CAST( str AS BINARY) 의 약자입니다.

    일부 컨텍스트에서는 인덱스의 컬럼을 BINARY 에 캐스트하면 MySQL은 인덱스를 효율적으로 사용할 수 없습니다.

  • CAST( expr AS type )

    CONVERT() 와 마찬가지로, CAST() 함수는 모든 유형의식이 지정되어 지정된 형태의 결과 값이 생성됩니다. 자세한 내용은 CONVERT() 의 설명을 참조하십시오.

  • CONVERT( expr , type ) , CONVERT( expr USING transcoding_name )

    CONVERT() 및 CAST() 함수는 모든 유형의식이 지정되어 지정된 형태의 결과 값이 생성됩니다.

    결과의 type 다음 값 중 하나를 지정할 수 있습니다.

    • BINARY[( N )]

    • CHAR[( N )]

    • DATE

    • DATETIME

    • DECIMAL[( M [, D ])]

    • SIGNED [INTEGER]

    • TIME

    • UNSIGNED [INTEGER]

    BINARY 는 BINARY 데이터 형의 문자열을 생성합니다. 이에 따른 비교에 미치는 영향에 대해서는 섹션 11.4.2 "BINARY 및 VARBINARY 형" 을 참조하십시오. 옵션의 길이 N 이 지정된 경우, BINARY( N ) 을 사용하면 캐스트 N 바이트의 인수 밖에 사용되지 않습니다. 값이 N 바이트보다 짧은 경우 N 의 길이가 될 때까지 0x00 바이트로 패딩됩니다.

    CHAR( N ) 어구를 사용하면 캐스트 N 문자의 인수 밖에 사용되지 않습니다.

    CAST() 와 CONVERT(... USING ...) 은 표준 SQL 구문입니다. USING 형식 이외의 CONVERT() 는 ODBC 구문입니다.

    USING 함께 CONVERT() 을 사용하면 다양한 문자 집합간에 데이터가 변환됩니다. MySQL에서는 트랜스 코딩 이름은 해당 문자 집합 이름과 동일합니다. 예를 들어,이 문은 기본 문자 집합의 문자열 'abc' 를 utf8 문자 집합의 해당 문자열로 변환합니다.

     SELECT CONVERT ( 'abc'USING utf8);
    

이진 문자열은 문자 세트가없고, 대문자와 소문자의 구별의 개념도 없기 때문에 일반적으로 대문자와 소문자가 구별되지 않는 방법으로, BLOB 값 또는 기타 이진 문자열을 비교할 수 없습니다. 대문자와 소문자가 구별되지 않는 비교를 수행하려면 CONVERT() 함수를 사용하여 값을 비 이진 문자열로 변환합니다. 결과의 비교는 문자열 데이터 정렬이 사용됩니다. 예를 들어, 결과의 문자 세트에 대소 문자를 구분하지 않는 데이터 정렬이 포함 된 경우 LIKE 연산자에서 대소 문자를 구분하지 않습니다.

 SELECT 'A'LIKE CONVERT ( blob_col USING latin1) FROM tbl_name ;

다른 문자 집합을 사용하려면 위의 문장 latin1 에 이름을 할당합니다. 변환 된 문자열에 특정 데이터 정렬을 지정하려면 섹션 10.1.9.2 "CONVERT ()와 CAST ()" 에서 설명하는 바와 같이, CONVERT() 호출 다음에 COLLATE 절을 사용합니다 . 예를 들어, latin1_german1_ci 를 사용하는 경우는 다음과 같습니다.

 SELECT 'A'LIKE CONVERT ( blob_col USING latin1) COLLATE latin1_german1_ci
   FROM tbl_name ;

CONVERT() 는 서로 다른 문자 집합으로 표시되는 문자열을 비교할 때보다 일반적으로 사용할 수 있습니다.

LOWER() (와 UPPER() )를 바이너리 문자열 ( BINARY , VARBINARY , BLOB )에 적용해도 아무런 효과가 없습니다. 대 / 소문자 변환을 실행하려면 이진 문자열을 비 이진 문자열로 변환합니다.

mysql> SET @str = BINARY 'New York';
mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING latin1));
+-------------+-----------------------------------+
| LOWER(@str) | LOWER(CONVERT(@str USING latin1)) |
+-------------+-----------------------------------+
| New York    | new york                          |
+-------------+-----------------------------------+

캐스트 함수는 CREATE TABLE ... SELECT 문에서 특정 형태를 가지는 컬럼을 만들 때 도움이됩니다.

 CREATE TABLE new_table SELECT CAST ( '2000-01-01'AS DATE);

이 함수는 ENUM 컬럼을 사전 순으로 정렬 할 때 도움이 될 수 있습니다. 보통 ENUM 컬럼 정렬은 내부 수치를 사용하여 수행됩니다. 값을 CHAR 로 캐스팅하면 어휘 순으로 정렬됩니다.

 SELECT enum_col FROM tbl_name ORDER BY CAST ( enum_col AS CHAR);

CAST( str AS BINARY) 는 BINARY str 과 같습니다. CAST( expr AS CHAR) 는 수식은 기본 문자 집합을 가진 문자열로 처리됩니다.

CONCAT('Date: ',CAST(NOW() AS DATE)) 와 같이 복잡한 수식의 일부로 사용하는 경우에도 CAST() 의 결과가 달라집니다.

데이터를 다른 형식으로 추출하려면 CAST() 대신 대신 LEFT() 또는 EXTRACT() 와 같은 문자열 함수를 사용하십시오. 섹션 12.7 "날짜 및 시간 함수" 를 참조하십시오.

숫자 컨텍스트에서 문자열을 숫자로 변환하려면 일반적으로 문자열 값을 숫자처럼 사용하는 것 외에 아무것도 할 필요가 없습니다.

 mysql> SELECT 1+'1';
        -> 2

산술 연산에서 문자열을 사용하는 경우는 식의 평가시에 부동 소수점 숫자로 변환됩니다.

문자열의 컨텍스트에서 숫자를 사용하는 경우 자동으로 숫자가 문자열로 변환됩니다.

 mysql> SELECT CONCAT('hello you ',2);
         -> 'hello you 2'

MySQL 5.6.4 이전에서는 어떤 테이블도 선택되지 않는 문 TIMESTAMP 값에 명시 적으로 CAST() 를 사용하면 변환이 실행되기 전에 그 값이 MySQL 5.6에서 문자열로 처리됩니다 . 이렇게하면 값을 수치 형으로 변환하면 다음과 같이 값이 잘립니다.

mysql> SELECT CAST(TIMESTAMP '2014-09-08 18:07:54' AS SIGNED);
+-------------------------------------------------+
| CAST(TIMESTAMP '2014-09-08 18:07:54' AS SIGNED) |
+-------------------------------------------------+
|                                            2014 |
+-------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------------------+
| Level   | Code | Message                                                  |
+---------+------+----------------------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: '2014-09-08 18:07:54' |
+---------+------+----------------------------------------------------------+
1 row in set (0.00 sec)

다음과 같이 이것은 테이블에서 행을 선택하는 경우에는 적용되지 않습니다.

mysql> USE test;

Database changed
mysql> CREATE TABLE c_test (col TIMESTAMP);
Query OK, 0 rows affected (0.07 sec)

mysql> INSERT INTO c_test VALUES ('2014-09-08 18:07:54');
Query OK, 1 row affected (0.05 sec)

mysql> SELECT col, CAST(col AS UNSIGNED) AS c_col FROM c_test;
+---------------------+----------------+
| col                 | c_col          |
+---------------------+----------------+
| 2014-09-08 18:07:54 | 20140908180754 |
+---------------------+----------------+
1 row in set (0.00 sec)

MySQL 5.6.4 이후에서는 다음과 같이 어떤 줄도 선택되지 않은 쿼리에서도 선택되는 경우와 같이 CAST ()에서 TIMESTAMP 값이 처리됩니다.

mysql> SELECT CAST(TIMESTAMP '2014-09-08 18:07:54' AS SIGNED);
+-------------------------------------------------+
| CAST(TIMESTAMP '2014-09-08 18:05:07' AS SIGNED) |
+-------------------------------------------------+
|                                  20140908180754 |
+-------------------------------------------------+
1 row in set (0.00 sec)

숫자에서 문자열의 암시 적 변환은 섹션 12.2 "수식 계산에서의 타입 변환" 을 참조하십시오.

MySQL 그럼, 부호 첨부와 부호 없음 모두 64 비트 값을 사용하여 연산을 지원하고 있습니다. 수치 연산자 ( + 또는 - )를 사용하고, 피연산자 중 하나가 부호없는 정수이면, 디폴트의 결과가 부호없이됩니다 ( 섹션 12.6.1 "산술 연산자" 를 참조 하십시오). 이것은 SIGNED 또는 UNSIGNED 캐스트 연산자를 사용하여 값을 각각 부호있는 또는 부호없는 64 비트 정수로 변환하여 재정의 할 수 있습니다.

mysql> SELECT CAST(1-2 AS UNSIGNED);
        -> 18446744073709551615
mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
        -> -1

피연산자 중 하나가 부동 소수점 값이면 결과가 부동 소수점 값이 위의 규칙에 의한 영향을받지 않습니다. (이 맥락에서 DECIMAL 컬럼 값은 부동 소수점 값으로 간주됩니다.)

mysql> SELECT CAST(1 AS UNSIGNED) - 2.0;
        -> -1.0

SQL 모드 변환 연산의 결과에 영향을 미칩니다. 예 :

  • "zero"날짜 문자열을 날짜로 변환 할 때 CONVERT() 와 CAST() 는 NULL 을 반환 NO_ZERO_DATE SQL 모드가 활성화 될 때 경고를 발행합니다.

  • 정수의 뺄셈은 NO_UNSIGNED_SUBTRACTION SQL 모드가 활성화되어있는 경우 피연산자 중 하나가 부호 없음에도 결과가 부호 첨부합니다.

자세한 내용은 섹션 5.1.7 "서버 SQL 모드" 를 참조하십시오.

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