모든 수치형 데이터 타입을 산술 연산에 사용할 수 있다. 0으로 나누는 수식은 무한대를 나타내기 위해 INF로 나타낸다.
산술 연산의 결과 타입은 피연산자의 데이터 타입과 연산의 종류에 따라 결정된다. NUMERIC 타입에 대한 산술 수식과 그 결과는 다음과 같이 결정된다.
연산 |
결과의 최대 자릿수 |
결과의 소수점 이하 자릿수 |
---|---|---|
N(p1, s1) + N(p2, s2) |
max(p1-s1, p2-s2)+max(s1, s2) +1 |
max(s1, s2) |
N(p1, s1) - N(p2, s2) |
max(p1-s1, p2-s2)+max(s1, s2) |
max(s1, s2) |
N(p1, s1) * N(p2, s2) |
p1+p2+1 |
s1+s2 |
N(p1, s1) / N(p2, s2) |
s2 > 0 이면 Pt = p1+max(s1, s2) + s2 - s1, 그 외에는 Pt = p1라 하고, s1 > s2 이면 St = s1, 그 외에는 s2라 하면, 소수점 이하 자릿수는 St < 9 이면 min(9-St, 38-Pt) + St, 그 외에는 St |
산술 수식을 계산할 때 수치 데이터 타입이 다른 타입으로 변환되어야 하는 경우에는 다음과 같은 순서로 규칙을 적용하여 수식에 대해 타입 변환이 일어난다.
리스트의 위쪽에 위치한 데이터 타입들이 아래쪽 데이터 타입으로 변환된다. 예를 들어, SMALL INTEGER와 FLOAT 간의 비교는 SMALL INTEGER가 FLOAT로 변환되고, 결과로 FLOAT가 반환된다.
MONETARY 타입은 화폐 값을 표현하며 디폴트 값은 CUBRID_LANG 환경 변수에서 지정한 로캘(locale)을 따른다. CUBRID_LANG이 'en_US'로 지정되어 있으면 디폴트 값은 'US 달러($)'이다. 시스템 관리자를 통해 다른 통화 타입을 디폴트 값으로 설정할 수 있다. 산술 연산자 +와 -는 두 화폐 데이터를 더하거나 뺄 때 사용할 수 있으며, 두 경우 모두 결과는 MONETARY 타입이 된다. 모든 수치 데이터 타입을 MONETARY 타입과 함께 곱하기, 나누기 연산에 사용할 수 있다. 일반적으로 MONETARY 타입은 DOUBLE 타입과 같은 연산 방식을 채택하고 있다. 다음은 각각 MONETARY 타입의 결과를 반환하는 유효한 수식들이다.
MONETARY + MONETARY = MONETARY
MONETARY + NUMERIC = MONETARY
MONETARY - MONETARY = MONETARY
MONETARY - NUMERIC = MONETARY
MONETARY * NUMERIC = MONETARY
NUMERIC * MONETARY = MONETARY
MONETARY / NUMERIC = MONETARY