비교 연산

다음은 비교 연산자의 피연산자 타입에 따른 변환 규칙이다.

operand1 타입

operand2 타입

변환

비교

수치형 타입

수치형 타입

없음

NUMERIC

문자열 타입

operand2를 DOUBLE로 변환

NUMERIC

날짜/시간 타입

없음

N/A

문자열 타입

수치형 타입

operand1을 DOUBLE로 변환

NUMERIC

문자열 타입

없음

문자열

날짜/시간 타입

operand1을 날짜/시간 타입으로 변환

날짜/시간

날짜/시간 타입

수치형 타입

없음

N/A

문자열 타입

operand2를 날짜/시간 타입으로 변환

날짜/시간

날짜/시간 타입

우선순위가 높은 타입으로 변환

날짜/시간

비교 연산자 변환 규칙에는 다음과 같은 예외가 있다.

operand1 타입

operand2 타입

변환

비교

문자열 타입

수치형 타입

operand2를 문자열 타입으로 변환

문자열

날짜/시간 타입

operand2를 문자열 타입으로 변환

문자열

operand2가 집합인 연산자(IS IN, IS NOT IN, = ALL, = ANY, < ALL, < ANY, <= ALL, <= ANY, >= ALL, >= ANY)에 대해서는 위의 예외가 적용되지 않는다.

수치형 타입과 문자열 타입 피연산자

문자열 타입 피연산자가 DOUBLE로 변환된다.

CREATE TABLE t(i INT, s STRING);

INSERT INTO t VALUES(1,'1'),(2,'2'),(3,'3'),(4,'4'), (12,'12');

 

SELECT i FROM t WHERE i < '11.3';

 

            i

=============

            1

            2

            3

            4

 

SELECT ('2' <= 11);

 

     ('2'<11)

=============

            1

문자열 타입과 날짜/시간 타입 피연산자

문자열 타입 피연산자가 날짜/시간 타입으로 변환된다.

SELECT ('2010-01-01' < date'2010-02-02');

 

   ('2010-01-01'<date '2010-02-02')

==================================

                                1

 

SELECT (date'2010-02-02' >= '2010-01-01');

 

  (date '2010-02-02'>='2010-01-01')

===================================

                                1

문자열 타입과 수치형 타입 호스트 변수 피연산자

수치형 타입 호스트 변수가 문자열 타입으로 변환된다.

PREPARE s FROM 'SELECT s FROM t WHERE s < ?';

EXECUTE s USING 11;

       s

===================

     '1'

문자열 타입 컬럼과 수치형 타입 값 피연산자

수치형 타입 값이 문자열 타입으로 변환된다.

SELECT s FROM t WHERE s > 11;

       s

==================

     '2'

     '3'

     '4'

     '12'

 

SELECT s FROM t WHERE s BETWEEN 11 AND 33;

        s

======================

      '2'

      '3'

      '12'

문자열 타입 컬럼과 날짜/시간 타입 값 피연산자

날짜/시간 타입 값이 문자열 타입으로 변환된다.

SELECT s FROM t;

 

           s

======================

    '01/01/1998'

    '01/01/1999'

    '01/01/2000'

 

SELECT s FROM t WHERE s <= date'02/02/1998';

            s

======================

    '01/01/1998'

    '01/01/1999'

    '01/01/2000'