Finally… TO_BYTE()

Ya hemos hablado otras veces del antipático tipo BYTE en Teradata y de los problemas que encontramos en las conversiones de y hacia ese tipo de dato. Hemos incluso recurrido a trampas de prestidigitador barato para conseguir conversiones entre BYTE e INTEGER.

Para recorrer el camino inverso, Teradata 13.10 presenta la novedosa función TO_BYTE(), que nos permite -por fin- convertir números en bytes.

Echémosle un vistazo. Lo primero que vamos a ver es qué tipo de dato devuelve:

SELECT * FROM DBC.DBCINFO;

 *** Query completed. 3 rows found. 2 columns returned.
 *** Total elapsed time was 1 second.

InfoKey                        InfoData
------------------------------ --------------------------------------------
RELEASE                        13.10.00.10
VERSION                        13.10.00.14
LANGUAGE SUPPORT MODE          Standard

 BTEQ -- Enter your SQL request or BTEQ command:

SELECT TYPE(TO_BYTE(2147483647));

 *** Query completed. One row found. One column returned.
 *** Total elapsed time was 1 second.

Type(TO_BYTE(2147483647))
---------------------------------------
BYTE(4)

Upa! Efectivamente, devuelve un BYTE(4). Esto nos lleva a que los límites estrictos para conversiones a BYTE son las de un BYTE(4), que es justo el rango que utiliza Teradata para el tipo INTEGER.

En efecto, si nos salimos de ese estricto rango, la función devuelve un error:

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT TO_BYTE(2147483647);

 *** Query completed. One row found. One column returned.
 *** Total elapsed time was 1 second.

TO_BYTE(2147483647)
-------------------
7FFFFFFF

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT TO_BYTE(2147483648);

 *** Failure 5589 Function 'TO_BYTE' does not exist.
                Statement# 1, Info =0
 *** Total elapsed time was 1 second.

Lo mismo ocurre si desbordamos el intervalo para sus valores negativos:

 BTEQ -- Enter your SQL request or BTEQ command:

SELECT TO_BYTE(-2147483648);

 *** Query completed. One row found. One column returned.
 *** Total elapsed time was 1 second.

TO_BYTE(-2147483648)
--------------------
80000000

 BTEQ -- Enter your SQL request or BTEQ command:

SELECT TO_BYTE(-2147483649);
 *** Failure 5589 Function 'TO_BYTE' does not exist.
                Statement# 1, Info =0
 *** Total elapsed time was 1 second.

Así pues, a partir de Teradata 13.10 tenemos una herramienta algo más amigable para tratar conversiones con tipos BYTE. No es perfecta, pero mejora mucho lo que había anteriormente.

Saludos.

Carlos.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: