ORACLE - « Cero » como prefijo en una tabla

Resuelto
sanave Mensajes publicados 3 Estado Miembro -  
DROE Mensajes publicados 148 Fecha de registro   Estado Miembro Última intervención   -
Hola,

Tengo una tabla numérica parcialmente rellena:

1- ¿Cómo es posible añadir ceros delante del número existente, sabiendo que debe estar limitado a 4 caracteres?
ejemplos:
Para 23, me gustaría 0023;
para 125, me gustaría 0125.

2- Al crear la tabla, ¿qué parámetro debe configurarse para obtener este resultado?

Gracias por vuestra ayuda...

5 respuestas

  1. jykoe
     
    Es posible prefijar la representación de un número con ceros de la siguiente manera:
    supongamos que tenemos una tabla COMMUNE con un campo CODE_INSEE de tipo number :

    LPAD(cast(CODE_INSEE as varchar2(5 BYTE)),5,'0')

    devuelve '01034' para la commune cuyo código INSEE es 1034 (Belley, en l'Ain)

    Para los códigos INSEE que ocupan 5 caracteres, esta función no añadirá ningún 0.
    2
  2. varfendell Mensajes publicados 3259 Fecha de registro   Estado Miembro Última intervención   707
     
    Hola,

    ¿Has probado rellenar el campo int poniendo 4 después (para decir que el int debe contener 4 dígitos)?

    Si no, reemplaza el tipo por un varchar4
    --
    La Bretaña... el lugar más bello del mundo.
    0
  3. sanave Mensajes publicados 3 Estado Miembro
     
    Aquí está lo que tengo actualmente,

    Nombre : COPOLE
    Tipo de datos : NUMBER
    Tamaño : 4

    si cambio NUMBER por VARCHAR, me dice :

    " ORA-01439 : una columna debe estar vacía para poder modificar su tipo de datos".

    Entonces, aparentemente no puedo cambiarlo a mitad de camino el parámetro !!

    (Para Bretaña, ¡estoy de acuerdo!)
    0
    1. varfendell Mensajes publicados 3259 Fecha de registro   Estado Miembro Última intervención   707
       
      En ese caso, si tu tabla no es demasiado grande ni demasiado llena, puedes recrearla y volver a llenarla, pero con el tipo correcto para la columna que te interesa.
      0
  4. sanave Mensajes publicados 3 Estado Miembro
     
    Eso es lo que temía....!!

    Bien, en cualquier caso, gracias por tu ayuda,
    solo me queda ponerme a trabajar...
    0
  5. DROE Mensajes publicados 148 Fecha de registro   Estado Miembro Última intervención   48
     
    Hola,

    una solución entre otras:

    este valor debe almacenarse en la base en este formato?
    Si no, entonces solo en la visualización:

    SELECT TO_CHAR(COPOLE,'0000') FROM dual; ----> 0125

    Efectivamente no se puede cambiar el tipo de una columna si ya está rellena.

    Solución

    1- Renombrar la columna COPOLE a A_SUPP
    Eliminar el índice si la columna está indexada.

    ALTER TABLE table_name RENAME COLUMN copole TO a_supp;

    2- Creación de una nueva columna COPOLE de tipo VARCHAR2

    ALTER TABLE table_name ADD (copole VARCHAR2(4));

    3- actualización de esta columna con transformación

    UPDATE table_name set COPOLE = TO_CHAR(a_supp,'0000')

    4 - Eliminación de la columna A_SUPP

    5- Reindexación de la columna COPOLE

    DROE

    http://www.dba-ora.fr/article-function-sql-oracle-to_char-70874668.html

    --

    La experiencia es el nombre que cada uno da a sus errores
    0