다음은 비교 연산자의 피연산자 타입에 따른 변환 규칙이다.
operand1 타입 |
operand2 타입 |
변환 |
비교 |
---|---|---|---|
수치형 타입 |
수치형 타입 |
없음 |
NUMERIC |
문자열 타입 |
operand2를 DOUBLE로 변환 |
NUMERIC |
|
날짜/시간 타입 |
없음 |
N/A |
|
문자열 타입 |
수치형 타입 |
operand1을 DOUBLE로 변환 |
NUMERIC |
문자열 타입 |
없음 |
문자열 |
|
날짜/시간 타입 |
operand1을 날짜/시간 타입으로 변환 |
날짜/시간 |
|
날짜/시간 타입 |
수치형 타입 |
없음 |
N/A |
문자열 타입 |
operand2를 날짜/시간 타입으로 변환 |
날짜/시간 |
|
날짜/시간 타입 |
우선순위가 높은 타입으로 변환 |
날짜/시간 |
비교 연산자 변환 규칙에는 다음과 같은 예외가 있다.
operand1 타입 |
operand2 타입 |
변환 |
비교 |
---|---|---|---|
문자열 타입 |
수치형 타입 |
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'