RPAD() en Teradata

Los que están (estamos) muy acostumbrados a trabajar con Oracle apreciarán (apreciamos) sobre todo su versatilidad. En efecto, Oracle es muy versátil y su SQL ofrece gran cantidad de funciones ‘built-in‘ que faciltan enormemente la vida del pobre desarrollador. Esto, siendo como es algo muy positivo, tiene la desventaja de que poco a poco nos vamos acostumbrando a hacer las cosas ‘a la Oracle’ y perdemos la perspectiva. Cuando cambias de SGBDR a otro un poco más ‘monolítico’ (como puede ser Teradata) arrastras esas dependencias y te atrancas en cosas que, si te paras a pensarlas, no son difíciles en absoluto.  Sólo hay que dejar de pensar ‘a la Oracle’ y pensar simplemente ‘en SQL’.

Ya vimos algo parecido con LAG/LEAD en Teradata. Aquí vamos a ver cómo podemos hacer que en Teradata -que carece de función RPAD- no echemos en falta dicha funcionalidad.

Recordemos lo que hace RPAD en Oracle.

RPAD

Syntax

RPAD ( expr1, n, expr2 )

Purpose

RPAD returns expr1, right-padded to length n characters with expr2, replicated as many times as necessary. This function is useful for formatting the output of a query.

Vamos, que rellena una cadena por la derecha con un carácter hasta la longitud deseada.

Recordemos que Teradata permite compilar funciones en C y utilizarlas como UDF’s (User Defined Functions – Funciones Definidas de Usuario). Es algo más ‘rupestre’ que las funciones PL/SQL de Oracle, aunque pueden dar muy buen resultados.

No obstante, no vamos a ir tan lejos como eso. El Primer Mandamiento dice:

Si se puede hacer en SQL, hazlo en SQL.

Y eso es lo que vamos a hacer.

¿Cómo? Pues utilizando la universal función ‘substring’ (SUBSTR) con una cadena de ‘expr2’ lo suficientemente larga y sacando la porción izquierda hasta los ‘n’ caracteres deseados.

Tomaremos algo parecido a RPAD(expr1, ‘0’, 3) como demostración:

 BTEQ -- Enter your DBC/SQL request or BTEQ command:

SELECT SUBSTR('9'||'00000',1,3) "RPAD('9',3,'0')";

SELECT SUBSTR('9'||'00000',1,3) "RPAD('9',3,'0')";

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

RPAD('9',3,'0')
---------------
900

 BTEQ -- Enter your DBC/SQL request or BTEQ command:

SELECT SUBSTR('90'||'00000',1,3) "RPAD('90',3,'0')";

SELECT SUBSTR('90'||'00000',1,3) "RPAD('90',3,'0')";

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

RPAD('90',3,'0')
----------------
900

 BTEQ -- Enter your DBC/SQL request or BTEQ command:

SELECT SUBSTR('900'||'00000',1,3) "RPAD('900',3,'0')";

SELECT SUBSTR('900'||'00000',1,3) "RPAD('900',3,'0')";

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

RPAD('900',3,'0')
-----------------
900

También existe otra posibilidad: utilizar un CAST a CHAR(n) (en nuestro ejemplo: 3) en vez del segúndo argumento del SUBSTR():

 BTEQ -- Enter your DBC/SQL request or BTEQ command:

SELECT CAST(SUBSTR('9'||'00000',1) AS CHAR(3)) "RPAD('9',3,'0')";

SELECT CAST(SUBSTR('9'||'00000',1) AS CHAR(3)) "RPAD('9',3,'0')";

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

RPAD('9',3,'0')
---------------
900

 BTEQ -- Enter your DBC/SQL request or BTEQ command:

SELECT CAST(SUBSTR('90'||'00000',1) AS CHAR(3)) "RPAD('90',3,'0')";

SELECT CAST(SUBSTR('90'||'00000',1) AS CHAR(3)) "RPAD('90',3,'0')";

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

RPAD('90',3,'0')
----------------
900

 BTEQ -- Enter your DBC/SQL request or BTEQ command:

SELECT CAST(SUBSTR('900'||'00000',1) AS CHAR(3)) "RPAD('900',3,'0')";

SELECT CAST(SUBSTR('900'||'00000',1) AS CHAR(3)) "RPAD('900',3,'0')";

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

RPAD('900',3,'0')
-----------------
900

Saludos.

Carlos.

Una respuesta a RPAD() en Teradata

  1. […] en Teradata Siguiendo con lo que vimos en RPAD() en Teradata, para conseguir los resultados del LPAD() de Oracle en Teradata basta con concatenar la cadena […]

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: