crear - busqueda ssis
¿Cómo obtengo el flujo de datos de SSIS para poner ''0.00'' en un archivo plano? (4)
¿Podría usar una columna derivada para cambiar el formato del valor? ¿Lo intentaste?
Tengo un paquete SSIS con un flujo de datos que toma una fuente de datos ADO.NET (solo una tabla pequeña), ejecuta una consulta de selección * y los resultados de la consulta en un archivo plano (también intenté simplemente extraer toda la tabla y no usando una selección de SQL).
El problema es que la fuente de datos extrae una columna que es un tipo de datos Money, y si el valor no es cero, entra en el archivo plano de texto muy bien (como ''123.45''), pero cuando el valor es cero, aparece en el archivo plano de destino como ''.00''. Necesito saber cómo volver a poner el cero inicial en el archivo plano.
He intentado varios tipos de datos para la salida (en el administrador de conexión de archivos planos), incluyendo moneda y cadena, pero esto parece no tener ningún efecto.
Probé una declaración de caso en mi selección, así:
CASE WHEN columnValue = 0 THEN
''0.00''
ELSE
columnValue
END
(aún resulta en ''.00'')
Probé variaciones sobre esto como este:
CASE WHEN columnValue = 0 THEN
convert(decimal(12,2), ''0.00'')
ELSE
convert(decimal(12,2), columnValue)
END
(Aún resulta en ''.00'')
y:
CASE WHEN columnValue = 0 THEN
convert(money, ''0.00'')
ELSE
convert(money, columnValue)
END
(resultados en ''.0000000000000000000'')
Este pequeño problema tonto es matarme. ¿Alguien puede decirme cómo obtener un valor cero de la base de datos de datos de Money en un archivo plano como ''0,00''?
Dado que está exportando a un archivo de texto, simplemente exporte datos preformateados.
Puede hacerlo en la consulta o crear una columna derivada, sea lo que sea que le resulte más cómodo.
Elegí hacer la columna de 15 caracteres de ancho. Si importas a un sistema que espera números, esos ceros deberían ignorarse ... ¿por qué no estandarizar la longitud del campo?
Una solución simple en SQL es la siguiente:
select
cast(0.00 as money) as col1
,cast(0.00 as numeric(18,2)) as col2
,right(''000000000000000'' + cast( 0.00 as varchar(10)), 15) as col3
go
col1 col2 col3
--------------------- -------------------- ---------------
.0000 .00 000000000000.00
Simplemente reemplace ''0.00'' con el nombre de su columna y no olvide agregar FROM table_name, etc.
Estaba teniendo exactamente el mismo problema, y la respuesta de Soo funcionó para mí. Envié mis datos a una transformación de columna derivada (en la caja de herramientas Transformación de flujo de datos). Agregué la columna derivada como una nueva columna del tipo de datos Unicode String ([DT_WSTR]) y usé la siguiente expresión:
Precio <1? "0" + (DT_WSTR, 6) Precio: (DT_WSTR, 6) Precio
¡Espero que eso ayude!
Usé el editor avanzado para cambiar la columna de double-precision float
a decimal
y luego establecí la Scale
en 2: