날짜/시간 타입의 피연산자가 '-' 연산자에 주어지고 타입이 서로 다르면, 두 타입을 비교하여 우선순위가 높은 쪽의 타입으로 변환된다. 다음 예는 왼쪽 피연산자의 데이터 타입이 DATE에서 DATETIME으로 바뀌어 결과는 DATETIME의 '-' 연산 결과인 밀리초를 출력한다.
SELECT date'2002-01-01' - datetime'2001-02-02 12:00:00 am';
date '2002-01-01'- datetime '2001-02-02 12:00:00 am'
=====================================================
28771200000
수치형 타입의 피연산자가 주어지고 타입이 서로 다르면, 두 타입을 비교하여 우선순위가 높은 쪽의 타입으로 변환된다.
날짜/시간 타입과 수치형 타입의 피연산자가 '+' 또는 '-' 연산자에 주어지면, 수치형 타입 피연산자는 BIGINT, INT, SHORT 중 하나로 변환된다.
날짜/시간 타입과 문자열 타입이 피연산자이면, '+'와 '-' 연산자만 허용한다. '+' 연산자가 사용되면 다음 규칙이 적용된다.
SELECT date'2002-01-01' + '10';
date '2002-01-01'+'10'
======================
01/11/2002
날짜/시간 타입과 문자열 타입이 피연산자이고, '-' 연산자가 사용되면 다음 규칙이 적용된다.
SELECT date'2002-01-01'-'2001-01-01';
date '2002-01-01'-'2001-01-01'
================================
31536000000
-- this causes an error
SELECT date'2002-01-01'-'10';
In line 1, column 13,
ERROR: Cannot coerce '10' to type datetime.
수치형 타입과 문자열 타입이 피연산자이면 다음 규칙이 적용된다.
SELECT 4 + '5.2';
4+'5.2'
==========================
9.199999999999999e+00
CUBRID 2008 R3.1 이하 버전과 달리, 날짜/시간 형태의 문자열, 즉 '2010-09-15'와 같은 문자열은 날짜/시간 타입으로 변환되지 않는다. 날짜/시간 타입을 갖는 리터럴(DATE'2010-09-15')은 덧셈, 뺄셈 연산에 사용할 수 있다.
SELECT '2002-01-01'+1;
ERROR: Cannot coerce '2002-01-01' to type double.
SELECT DATE'2002-01-01'+1;
date '2002-01-01'+1
=====================
01/02/2002
두 문자열을 곱하거나 나누거나 빼면 숫자로 변환되며, 결과로 DOUBLE 타입의 값을 반환한다.
SELECT '3'*'2';
'3'*'2'
============================
6.000000000000000e+00
'+' 연산자의 동작은 cubrid.conf의 시스템 파라미터인 plus_as_concat을 어떻게 설정하느냐에 따라 결정된다. 자세한 내용은 구문/타입 관련 파라미터를 참고한다.
해당 타입으로 변환할 수 없으면 오류를 반환한다.