Conversión implícita y explícita
La conversión implícita es el uso de reglas internas para intentar evaluar y procesar sentencias que contengan tipos de datos mezclados. Esto puede resultar útil al utilizar una función que espere un tipo de datos concreto o al emitir una consulta que compare valores que sean similares pero de tipo de datos distintos. El lenguaje SQL Netezza Performance Server está alineado con el estándar SQL para el casting implícito de tipos de datos.
Por ejemplo, en la sentencia siguiente, las dos expresiones pueden
ser nombres de columna, literales o expresiones más complejas:
SELECT * FROM tbl WHERE <character expression> > <integer expression>;Como
se está comparando una expresión de caracteres con una expresión entera, el
la expresión de caracteres se convierte implícitamente como un entero.A veces, la conversión implícita falla porque los datos no se pueden analizar
de forma que sean conformes con el tipo de datos nuevo. (Por ejemplo,
la serie de caracteres 'abc' no se puede analizar como un entero o
una fecha). En estos casos, utilice la función
cast para
convertir explícitamente los datos al tipo de datos apropiado. Por ejemplo,
si la columna age contiene datos de caracteres que representan valores
enteros, los datos han de convertirse como datos enteros, se este modo:SELECT * FROM tbl WHERE cast(age as integer) > 3;Ejemplos de mensajes de error que se emiten cuando la conversión implícita
sufre alguna anomalía:
- Si una expresión no se puede analizar como entero:
ERROR: pg_atoi: error in "abc": can't parse "abc"
- Si una expresión de caracteres no se puede analizar como un valor de fecha:
ERROR: Bad date external representation 'abc'
Este error puede deberse a sentencias como:SELECT * FROM tbl WHERE <date expression> = <character expression>;INSERT INTO <table having one column of type date> SELECT <character expression> FROM <another table>;
- Si una expresión de caracteres no se puede analizar como un valor numérico:
ERROR: 65524: Precision range error
Por ejemplo, cuando una expresión intenta multiplicar un numeric(24,4) por un varchar(50), el sistema intenta convertir implícitamente el varchar a un numeric(24,4). Sin embargo, si el varchar contiene demasiados dígitos, puede provocar un error de rango de precisión.