Add
The add operator (+) adds two operands and returns the sum.
Note: A configuration parameter is available to control whether this operator allows precision/scale to exceed 38. See
Decimal Digit Limitation on Functions, for details.
DECIMAL and NUMERIC Data Types
When the add operator is applied to operands that include DECIMAL or NUMERIC data types, the output data type, precision and scale might depend on the data type, precision and scale of the operands, as shown below.
Syntax
operand1 + operand2
Remarks
• The order of the inputs (operands) has no effect on the output data type.
• The outputs for DECIMAL and NUMERIC data types combined with other operands are shown in the table.
Inputs | Output |
DECIMAL(p1,s1) + DECIMAL(p2,s2) | DECIMAL(p3,s3), with p3 the larger precision of the inputs plus 1, and s3 the larger scale of the inputs. |
DECIMAL(p1,s1) + NUMERIC |
NUMERIC + NUMERIC | NUMERIC |
DECIMAL(p,s) + not-DECIMAL-or-NUMERIC | DECIMAL(p,s) |
NUMERIC + not-DECIMAL-or-NUMERIC | NUMERIC |
Example
DECIMAL(6,1) + NUMERIC(4,2) -> DECIMAL(7,2)
INTERVAL Type
INTERVAL can be added to DATE, TIME, TIMESTAMP or another INTERVAL.
Syntax
operand1 + operand2
Remarks
• INTERVAL days, hours, minutes, or seconds can only be added to other INTERVAL days, hours, minutes, or seconds. INTERVAL years or months can only be added to other INTERVAL years or months. The two groups of units are not interchangeable.
• When adding months, the TDV Server does not round down the day of the month, and it might throw an error if the day of the month is invalid for the specified month.
• The order of the inputs (operands) has no effect on the output data type.
• The outputs for INTERVAL added to various operands are shown in the table.
Inputs | Output |
INTERVAL + INTERVAL | INTERVAL |
INTERVAL + DATE DATE + INTERVAL | DATE. Only days, months, and years can be added to a DATE. |
INTERVAL + TIME TIME + INTERVAL | TIME |
INTERVAL + TIMESTAMP TIMESTAMP + INTERVAL | TIMESTAMP |
Examples
DATE '1999-12-31' + INTERVAL '1' DAY = DATE '2000-01-01'
INTERVAL '1' MONTH + DATE '1999-12-31'= DATE '2000-01-31'
DATE '1989-03-15' + INTERVAL '1' YEAR = DATE '1990-03-15'
DATE '2000-01-31' + INTERVAL '1' MONTH = <Error: February only has 28 days>
INTERVAL '6000' SECOND(4) + INTERVAL '3000' DAY(4) = INTERVAL '3000 01:40:00' DAY(4) TO SECOND
INTERVAL '6000' SECOND(4) + TIME '7:00:00' = TIME '08:40:00'
Mixed Data Types
The add operator can be applied to operands that have a wide variety of data types, including operands comparable or castable to data types that can accept arithmetic operators.
Syntax
operand1 + operand2
Remarks
The operand data types and resulting output data types are shown in the table.
Operand1 Type | Operand2 Type | Output Type |
TINYINT SMALLINT INTEGER BIGINT | TINYINT SMALLINT INTEGER BIGINT STRING | INTEGER |
TINYINT SMALLINT INTEGER BIGINT | FLOAT REAL | FLOAT |
TINYINT SMALLINT INTEGER BIGINT | DECIMAL NUMERIC | DECIMAL |
TINYINT SMALLINT INTEGER BIGINT STRING | DATE | DATE |
TINYINT SMALLINT INTEGER BIGINT STRING | TIMESTAMP | TIMESTAMP |
FLOAT REAL | TINYINT SMALLINT INTEGER BIGINT STRING | FLOAT |
FLOAT REAL | FLOAT REAL |
FLOAT REAL | DECIMAL NUMERIC | DECIMAL |
FLOAT REAL | DATE | DATE |
FLOAT REAL | TIMESTAMP | TIMESTAMP |
DECIMAL NUMERIC | TINYINT SMALLINT INTEGER BIGINT | DECIMAL |
DECIMAL NUMERIC | FLOAT REAL |
DECIMAL NUMERIC | DECIMAL NUMERIC | FLOAT |
DECIMAL NUMERIC | DATE | DATE |
DECIMAL NUMERIC | TIMESTAMP | TIMESTAMP |
DATE | INTERVAL | DATE |
DATE | STRING | DATE |
TIMESTAMP | INTERVAL | TIMESTAMP |
TIMESTAMP | STRING | TIMESTAMP |
STRING | STRING TINYINT SMALLINT INTEGER BIGINT NUMERIC FLOAT REAL DECIMAL DATE TIMESTAMP | DECIMAL INTEGER INTEGER INTEGER INTEGER DECIMAL FLOAT FLOAT DECIMAL DATE TIMESTAMP |
NULL | TINYINT SMALLINT INTEGER BIGINT NUMERIC FLOAT REAL DECIMAL DATE TIMESTAMP NULL | NULL |
TINYINT SMALLINT INTEGER BIGINT NUMERIC FLOAT REAL DECIMAL DATE TIMESTAMP STRING | NULL | NULL |
INTERVAL | DATE INTERVAL TIME TIMESTAMP | DATE INTERVAL TIME TIMESTAMP |