none
Convertir numeros RRS feed

  • Pregunta

  • Tengo un fichero de texto donde leo con SSIS 2008 R2 y un campo viene 00000001.0  o  00000000.5, mediante el derived column quiero insertarlo a una tabla de SQL como 1,0  o  0,5  pero haga lo que haga me lo convierte a 10 y a 5.

    Lo que he hecho es leer como string y cambiarlo asi   (DT_R4)REPLACE(Insercion,".",",")  y en sql el tipo de dato que recoje este campo es decimal, o float, o numeric. Provando con todo esto no me devuelve el numero que necesito.

    Alguna idea?

    Gracias

    miércoles, 2 de marzo de 2011 12:10

Respuestas

  • Hola.

    Yo creo que el problema está en el tipo de dato en el que extraes desde el fichero de texto al flujo de SSIS. En tu caso, debería ser un string, pero no creo que sea así, lo debes estar leyendo como numérico, con lo que lo que ocurre después ya no lo controlas.

    Así que te recomiendo que lo vayas haciendo paso a paso, y usando Data Viewers para estar seguro en cada momento de lo que estás manejando. Lo que estás probando no está nada desencaminado, pero hazlo en dos pasos primero, aunque luego trates de llevarlo solo a uno.

    txt: 00000000.5 (string)

    Derived Column: De "00000000.5" a "00000000,5" (string) con REPLACE(Insercion,".",",")

    Data Conversion: De "00000000,5" a 0,5 (numeric(9,2))

    Tabla SQL: 0.5 (numeric(9,2))

    Inténtalo, si no lo logras, nos dices. Cuando quieras, movemos el hilo al foro de SSIS y allí seguimos.

     


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    domingo, 6 de marzo de 2011 16:35
    Moderador

Todas las respuestas

  • Bueno, en primer lugar yo hubiera preguntado en el foro de SSIS (http://social.msdn.microsoft.com/Forums/es-ES/ssises/threads).

    Luego, el separador decimal en SQL Server es el punto (.) y no la coma (,). Si el tipo de datos en donde vas a insertar esos valores es el que comentas (DECIMAL, FLOAT o NUMERIC), intentar hacer un cast con una coma por medio va a dar error.

    Así que si lo que tienes en la tabla destino es algún tipo de datos que almacena decimales, no hay entonces que hacer ninguna conversión.

    Otra cosa es cómo quieres ver tú representado el número que está almacenado: separadores de millares, separadores decimales, etc.. Ahí sí que podrías aplicarle formatos, bien desde la propia consulta o desde la aplicación cliente (lo cual sería lo suyo)

    • Propuesto como respuesta Carlos Sacristan miércoles, 2 de marzo de 2011 12:49
    miércoles, 2 de marzo de 2011 12:49
  • Hola.

    Yo creo que el problema está en el tipo de dato en el que extraes desde el fichero de texto al flujo de SSIS. En tu caso, debería ser un string, pero no creo que sea así, lo debes estar leyendo como numérico, con lo que lo que ocurre después ya no lo controlas.

    Así que te recomiendo que lo vayas haciendo paso a paso, y usando Data Viewers para estar seguro en cada momento de lo que estás manejando. Lo que estás probando no está nada desencaminado, pero hazlo en dos pasos primero, aunque luego trates de llevarlo solo a uno.

    txt: 00000000.5 (string)

    Derived Column: De "00000000.5" a "00000000,5" (string) con REPLACE(Insercion,".",",")

    Data Conversion: De "00000000,5" a 0,5 (numeric(9,2))

    Tabla SQL: 0.5 (numeric(9,2))

    Inténtalo, si no lo logras, nos dices. Cuando quieras, movemos el hilo al foro de SSIS y allí seguimos.

     


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    domingo, 6 de marzo de 2011 16:35
    Moderador
  • Gracias, ya lo consegui, la recomendacion del Data Viewers, fue fundamental. Al final no necesite hacer un replace, aunque con el tambien funcionaba, pero tratando el dato como string y haciendo un convert(decimal(18,1), dato) fue suficiente .

    Muchas gracias a todos

     

    martes, 8 de marzo de 2011 10:17