LPAD() 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 sobre la que queremos el ‘LPAD()’ con una cadena con el caracter de relleno de la longitud deseada en el LPAD() y tomando un ‘substring‘ desde la posición de la longitud de la cadena (para ello usaremos la función ‘CHARACTERS()’ de Teradata) más uno .

Ejemplo: LPAD() para rellenar a ceros por la izquierda hasta cinco posiciones.

 BTEQ -- Enter your DBC/SQL request or BTEQ command:
SELECT SUBSTR('00000'||'19',CHARACTERS('19')+1) "LPAD('19',5,'0')";

SELECT SUBSTR('00000'||'19',CHARACTERS('19')+1) "LPAD('19',5,'0')";

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

LPAD('19',5,'0')
----------------
00019

 BTEQ -- Enter your DBC/SQL request or BTEQ command:
SELECT SUBSTR('00000'||'2119',CHARACTERS('2119')+1) "LPAD('2119',5,'0')";

SELECT SUBSTR('00000'||'2119',CHARACTERS('2119')+1) "LPAD('2119',5,'0')";

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

LPAD('2119',5,'0')
------------------
02119

 BTEQ -- Enter your DBC/SQL request or BTEQ command:
SELECT SUBSTR('00000'||'319',CHARACTERS('319')+1) "LPAD('319',5,'0')";

SELECT SUBSTR('00000'||'319',CHARACTERS('319')+1) "LPAD('319',5,'0')";

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

LPAD('319',5,'0')
-----------------
00319

Saludos.

Carlos.

Anuncios

15 respuestas a LPAD() en Teradata

  1. Pep dice:

    Buenos días,

    Me ha sido muy útil este artículo pero para campos no me valía si no cambiaba el CHARACTERS por el LENGTH

    SUBSTR(‘00000’||NOMBRE_CAMPO,LENGTH(NOMBRE_CAMPO)+1)

    Gracias! 😉

    • CarlosAL dice:

      Pep:

      LENGTH no es una función Teradata.

      Saludos.

      Carlos.

      • Pep dice:

        Entonces será cuestión de la versión que tenemos, usamos teradata SQL Assistant 13.1.

        • CarlosAL dice:

          Seguramente estás utilizando ODBC, que introduce una capa ‘inteligente’ (¿?) y la llamada que estás efectuando a LENGTH() la resuelve dicha capa. Prueba con bteq y verás (o deshabilita la llamada a funciones ODBC en el SQLAssistant).
          CHARACTERS() es la función nativa Teradata, y su versión ANSI es CHARACTER_LENGTH(), Pero no existe LENGTH() como tal en Teradata.

          Saludos.

          Carlos.

  2. […] Entre esta falta de versatilidad se encontraba el limitado repertorio de funciones, que hacía incómodo y a veces demasiado alambicado conseguir ciertas funcionalidades que en otros RDBMS’s (¿alguien dijo Oracle?) se obtienen […]

  3. Roberto Vega dice:

    Buen día Carlos estoy tratando de Igualar la Función DIGITS de DB2 en Teradata, como puedo aplicar lo que comentas en la parte superios pero para un campo INTEGER

    • Roberto Vega dice:

      Carlos entiendo que un campo INTEGER puede tener 10 digitos, el problema es como cumplir con esos 10 digitos si el campo los puede tener o no? ejemplo:

      Valor_Campo Salida_Esperada

      688231 –> 0000688231;
      12688231 –> 0012688231;
      123688231 –> 0123688231;

      • CarlosAL dice:

        Puedes utilizar LPAD() si estás en TD.14, pero lo suyo es emplear la cláusula FORMAT nativa Teradata.

        Saludos.

        Carlos.

        • Roberto Vega dice:

          Gracias Carlos

          Un favor la verdad ya trate de aplicar las dos pero no sale el resultado esperado, serias tan amable de compartirme un ejemplo, estoy ejecutando este query:

          Select
          Substring(‘0000’ From 1 For Chars(Trim(campo))) || Trim(campo) as campo
          FROM tabla

          el campo que trato de formatear es un CHAR(10) y estos son unos datos originales de jemplo:

          01
          0502
          0504
          0509
          0516
          0519
          0526
          0527
          052789
          05278958
          123456789

          El resultado tendria que ser:

          0000000001
          0000000502
          0000000504
          0000000509
          0000000516
          0000000519
          0000000526
          0000000527
          0000052789
          0005278958
          0123456789

          Te agradesco mucho por tu tiempo

          • Roberto Vega dice:

            Tambien ejecute este pero no llena las 10 posiciones:


            SELECT
            CASE WHEN Chars(Trim(campo)) < 10 THEN Substring('000000' From 1 For (Trim(campo))) || Trim(campo) ELSE Trim(campo) END
            FROM tabla;
            ''

            00001175
            00002017
            00002189
            00002057
            00002230
            0001
            00002372
            00002059
            00001137

  4. CarlosAL dice:

    BTEQ — Enter your SQL request or BTEQ command:
    SELECT SUBSTR(‘0000000000′,
    CHARACTER_LENGTH(TRIM(CADENA))+1)||CADENA “LPAD10”
    FROM ( SELECT ’01’ (CHAR(10)) CADENA ) PRE;

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

    LPAD10
    ——————–
    0000000001

    • Roberto Vega dice:

      Buena tarde Carlos estoy tratando de utilizar el ‘otranslate’ en la TD V-13.10 pero marca error, por que en la versión 14.0 no tiene problema? estoy tartando de ejecutar el query de tú foro Only numbers

      SELECT CASE
      WHEN CHARACTERS(otranslate(TRIM(COALESCE(‘123465-A’,”)),
      ‘a1234567890’,
      ‘a’)) = 0
      THEN ‘is only numbers’
      ELSE ‘is not only numbers’
      END
      ;

  5. Roberto Vega dice:

    Mil gracias por el apoyo Carlos

    • Roberto Vega dice:

      Buena tarde Carlos estoy tratando de utilizar el ‘otranslate’ en la TD V-13.10 pero marca error, por que en la versión 14.0 no tiene problema? estoy tartando de ejecutar el query de tú foro Only numbers

      SELECT CASE
      WHEN CHARACTERS(otranslate(TRIM(COALESCE(’123465-A’,”)),
      ‘a1234567890′,
      ‘a’)) = 0
      THEN ‘is only numbers’
      ELSE ‘is not only numbers’
      END
      ;

      • CarlosAL dice:

        Varias cosas:
        En las versiones anteriores a 14 las funciones Oracle deben ser compiladas y cargadas en la base de datos como UDF. Si no lo han sido, te dará error al no poder ejecutarlas.
        Á partir de la versión 14 aparecen incorporadas en forma nativa con una importante mejora en el rendimiento.
        No hace falta escribir dudas en todos y cada uno de los artículos que encuentres. Me has escrito lo mismo tres veces con un intervalo de una hora, y además en un horario inasequible.
        Los artículos son sólo indicaciones de cómo hacer las cosas, no un manual paso a paso.

        Saludos.

        Carlos.

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: