The following table shows the result data type for binary arithmetic operators.
The result data type for binary arithmetic operations involving UDT operands is the same as the result data type for the predefined data types to which the UDTs are implicitly cast.
For details on the result data type for binary arithmetic operations involving DateTime and Interval types, see Overview.
When the operand on the left is …  And the operand on the right is …  And the operator is …  Then the result data type is … 

any data type  any data type  **  FLOAT 
DATE  BYTEINT SMALLINT INTEGER BIGINT 
+   DATE If the value of a date result is not in the range of values allowed for the DATE type, an error is reported. The range is any date on the Gregorian calendar from year 1 to year 9999. 
BYTEINT SMALLINT INTEGER 
* / MOD  INTEGER These operations on DATE do not report an error, but results are generally not meaningful. 

BIGINT  * / MOD  BIGINT These operations on DATE do not report an error, but results are generally not meaningful. 

DECIMAL(k,j)  +   DATE These operations on DATE do not report an error, but results are generally not meaningful. Fractions of decimal values are truncated when added to or subtracted from date values. If the value of a date result is not in the range of values allowed for the DATE type, an error is reported. The range is any date on the Gregorian calendar from year 1 to year 9999. 

* / MOD  DECIMAL(p,j) These operations on DATE do not report an error, but results are generally not meaningful. For details about the value of p, see DECIMAL Result Data Type. 

NUMBER(k,j) NUMBER(k) NUMBER(*,j) NUMBER 
+   DATE These operations on DATE do not report an error, but results are generally not meaningful. Fractions of decimal values are truncated when added to or subtracted from date values. If the value of a date result is not in the range of values allowed for the DATE type, an error is reported. The range is any date on the Gregorian calendar from year 1 to year 9999. 

* / MOD  NUMBER  
FLOAT  * / +  MOD  FLOAT  
DATE    INTEGER The difference between two dates is the number of days between those dates. Note that this is not the numeric difference between the values. 

+ * / MOD  INTEGER These operations on DATE do not report an error, but results are generally not meaningful. 

CHAR(n) VARCHAR(n) 
* / +  MOD  FLOAT These operations on DATE do not report an error, but results are generally not meaningful. If an argument of an arithmetic operator is a character string, the first action is to attempt to convert the character string to a floating value. If this conversion fails, an error is reported. 

BYTEINT SMALLINT INTEGER 
BYTEINT SMALLINT INTEGER 
* / +  MOD  INTEGER 
BIGINT  * / +  MOD  BIGINT  
DECIMAL(k,j)  * / +  MOD  DECIMAL(p,j) For details about the value of p, see DECIMAL Result Data Type. 

NUMBER(k,j) NUMBER(k) NUMBER(*,j) NUMBER 
* / +  MOD  NUMBER  
FLOAT  * / +  MOD  FLOAT  
CHAR(n) VARCHAR(n) 
* / +  MOD  FLOAT If an argument of an arithmetic operator is a character string, the first action is to attempt to convert the character string to a floating value. If this conversion fails, an error is reported. 

DATE  +  DATE If the value of a date result is not in the range of values allowed for the DATE type, an error is reported. The range is any date on the Gregorian calendar from year 1 to year 9999. 

  error  
* / MOD  INTEGER These operations on DATE do not report an error, but results are generally not meaningful. 

BIGINT  BYTEINT SMALLINT INTEGER BIGINT 
* / +  MOD  BIGINT 
DECIMAL(k,j)  * / +  MOD  DECIMAL(p,j) For details about the value of p, see DECIMAL Result Data Type. 

NUMBER(k,j) NUMBER(k) NUMBER(*,j) NUMBER 
* / +  MOD  NUMBER  
FLOAT  * / +  MOD  FLOAT  
CHAR(n) VARCHAR(n) 
* / +  MOD  FLOAT If an argument of an arithmetic operator is a character string, the first action is to attempt to convert the character string to a floating value. If this conversion fails, an error is reported. 

DATE  +  DATE If the value of a date result is not in the range of values allowed for the DATE type, an error is reported. The range is any date on the Gregorian calendar from year 1 to year 9999. 

  error  
* / MOD  BIGINT These operations on DATE do not report an error, but results are generally not meaningful. 

DECIMAL(m,n)  BYTEINT SMALLINT INTEGER BIGINT 
+  *  DECIMAL(p,n) For details about the value of p, see DECIMAL Result Data Type. 
/ MOD  DECIMAL(m,n)  
DECIMAL(k, j)  +   DECIMAL(min(p,(1+max(n,j)+max(m n,kj))),max(n,j)) For details about the value of p, see DECIMAL Result Data Type. 

*  DECIMAL(min(p,m +k),(n+j)) For details about the value of p, see DECIMAL Result Data Type. 

/ MOD  DECIMAL(p,max(n,j)) For details about the value of p, see DECIMAL Result Data Type. 

NUMBER(k,j) NUMBER(k) NUMBER(*,j) NUMBER 
* / +  MOD  NUMBER  
FLOAT  * / +  MOD  FLOAT  
CHAR(n) VARCHAR(n) 
* / +  MOD  FLOAT If an argument of an arithmetic operator is a character string, the first action is to attempt to convert the character string to a floating value. If this conversion fails, an error is reported. 

DATE  +  DATE Fractions of decimal values are truncated when added to or subtracted from date values. If the value of a date result is not in the range of values allowed for the DATE type, an error is reported. The range is any date on the Gregorian calendar from year 1 to year 9999. 

  error  
*  DECIMAL(p,n) These operations on DATE do not report an error, but results are generally not meaningful. For details about the value of p, see DECIMAL Result Data Type. 

/ MOD  DECIMAL(m,n) These operations on DATE do not report an error, but results are generally not meaningful. 

NUMBER(m,n) NUMBER(m) NUMBER(*,n) NUMBER 
BYTEINT SMALLINT INTEGER BIGINT 
* / +  MOD  NUMBER 
DECIMAL(k,j)  
FLOAT  * / +  MOD  FLOAT  
CHAR(n) VARCHAR(n) 
FLOAT If an argument of an arithmetic operator is a character string, the first action is to attempt to convert the character string to a floating value. If this conversion fails, an error is reported. 

DATE  +  DATE Fractions of decimal values are truncated when added to or subtracted from date values. If the value of a date result is not in the range of values allowed for the DATE type, an error is reported. The range is any date on the Gregorian calendar from year 1 to year 9999. 

  error  
*  NUMBER These operations on DATE do not report an error, but results are generally not meaningful. 

/ MOD  NUMBER These operations on DATE do not report an error, but results are generally not meaningful. 

NUMBER(k,j) NUMBER(k) NUMBER(*,j) NUMBER 
* / +  MOD  NUMBER  
FLOAT  BYTEINT SMALLINT INTEGER BIGINT DECIMAL(k,j) NUMBER(k,j) NUMBER(k) NUMBER(*,j) NUMBER FLOAT 
* / +  MOD  FLOAT 
DATE  * / +  MOD  FLOAT These operations on DATE do not report an error, but results are generally not meaningful. 

CHAR(n) VARCHAR(n) 
* / +  MOD  FLOAT If an argument of an arithmetic operator is a character string, the first action is to attempt to convert the character string to a floating value. If this conversion fails, an error is reported. 

CHAR(n) VARCHAR(n) 
BYTEINT SMALLINT INTEGER BIGINT DECIMAL(k,j) NUMBER(k,j) NUMBER(k) NUMBER(*,j) NUMBER FLOAT CHAR(n) VARCHAR(n) 
* / +  MOD  FLOAT If an argument of an arithmetic operator is a character string, the first action is to attempt to convert the character string to a floating value. If this conversion fails, an error is reported. 
DATE  * / +  MOD  FLOAT These operations on DATE do not report an error, but results are generally not meaningful. If an argument of an arithmetic operator is a character string, the first action is to attempt to convert the character string to a floating value. If this conversion fails, an error is reported. 