En este tema se listan las transformaciones CAST implícitas disponibles para operaciones aritméticas.
Normalmente, los operadores aritméticos
(+, -, *, and /) operan en operandos del mismo tipo de datos y devuelven un valor del mismo tipo de datos que los operandos. En la tabla siguiente, los casos en los que resulta aceptable que los operandos sean de tipos de datos diferentes o en los que el tipo de datos del valor resultante es diferente de tipo de los operandos.
La tabla siguiente lista las transformaciones CAST implícitas para operaciones aritméticas.
Tipo de datos del operando izquierdo |
Tipo de datos del operando derecho |
Operadores soportados |
Tipo de datos de resultado |
INTEGER |
FLOAT |
+, -, *, / |
FLOAT1 |
INTEGER |
DECIMAL |
+, -, *, / |
DECIMAL1 |
INTEGER |
INTERVAL |
* |
INTERVAL4 |
FLOAT |
INTEGER |
+, -, *, / |
FLOAT1 |
FLOAT |
DECIMAL |
+, -, *, / |
FLOAT1 |
FLOAT |
INTERVAL |
* |
INTERVAL4 |
DECIMAL |
INTEGER |
+, -, *, / |
DECIMAL1 |
DECIMAL |
FLOAT |
+, -, *, / |
FLOAT1 |
DECIMAL |
INTERVAL |
* |
INTERVAL4 |
TIME |
TIME |
- |
INTERVAL2 |
TIME |
GMTTIME |
- |
INTERVAL2 |
TIME |
INTERVAL |
+, - |
TIME3 |
GMTTIME |
TIME |
- |
INTERVAL2 |
GMTTIME |
GMTTIME |
- |
INTERVAL2 |
GMTTIME |
INTERVAL |
+, - |
GMTTIME3 |
DATE |
DATE |
- |
INTERVAL2 |
DATE |
INTERVAL |
+, - |
DATE3 |
TIMESTAMP |
TIMESTAMP |
- |
INTERVAL2 |
TIMESTAMP |
GMTTIMESTAMP |
- |
INTERVAL2 |
TIMESTAMP |
INTERVAL |
+, - |
TIMESTAMP3 |
GMTTIMESTAMP |
TIMESTAMP |
- |
INTERVAL2 |
GMTTIMESTAMP |
GMTTIMESTAMP |
- |
INTERVAL2 |
GMTTIMESTAMP |
INTERVAL |
+, - |
GMTTIMESTAMP3 |
INTERVAL |
INTEGER |
*, / |
INTERVAL4 |
INTERVAL |
FLOAT |
*, / |
INTERVAL4 |
INTERVAL |
DECIMAL |
*, / |
INTERVAL4 |
INTERVAL |
TIME |
+ |
TIME3 |
INTERVAL |
GMTTIME |
+ |
GMTTIME3 |
INTERVAL |
DATE |
+ |
DATE3 |
INTERVAL |
TIMESTAMP |
+ |
TIMESTAMP3 |
INTERVAL |
GMTTIMESTAMP |
+ |
GMTTIMESTAMP3 |
Notas:
- Antes de que continúe la operación, el operando que no coincide con el tipo de datos del resultado sufre una transformación CAST en el tipo de datos del resultado. Por ejemplo, si el operando izquierdo de un operador de suma
es INTEGER y el operando derecho es
FLOAT, se efectúa una transformación CAST del operando izquierdo en FLOAT antes de realizar la operación de suma.
- Cuando se resta un valor (GMT)TIME de un valor (GMT)TIME, un valor DATE de un valor
DATE o un valor (GMT)TIMESTAMP de un valor (GMT)TIMESTAMP, da como resultado un valor
INTERVAL que representa el intervalo de tiempo entre los dos operandos.
- Al sumar o restar un valor INTERVAL de un valor (GMT)TIME, DATE o (GMT)TIMESTAMP
da como resultado un valor nuevo del tipo de datos del operando que no es INTERVAL representado mediante el punto horario que representa el valor no de INTERVAL original, más o menos la longitud del período de
tiempo representado mediante INTERVAL.
- Al multiplicar o dividir un valor de INTERVAL por un valor INTEGER, FLOAT o DECIMAL da como resultado un INTERVAL nuevo que representa la longitud del período de tiempo representado por el original, multiplicado o dividido por el factor
representado mediante el operando no de INTERVAL. Por ejemplo, un valor de INTERVAL de 2 horas y 16 minutos multiplicado por un valor
FLOAT de 2.5 da como resultado un valor de INTERVAL nuevo de 5 horas y 40 minutos.
Los cálculos intermedios que implica multiplicar o dividir el valor de
INTERVAL original se llevan a cabo en el tipo de datos del valor no de INTERVAL, pero los campos individuales de INTERVAL (por ejemplo, HOUR, YEAR, etc.) siempre son integrales, por lo tanto, es posible que se produzcan algunos errores de redondeo.
|