J'ai un paquet SSIS avec un flux de données qui prend une source de données ADO.NET (juste une petite table), exécute une requête SELECT * et génère les résultats de la requête dans un fichier plat (j'ai aussi essayé simplement de tirer Toute la table et non à l'aide d'un SQL Select).
Le problème est que la source de données tire une colonne un type de données d'argent, et si la valeur n'est pas zéro, il s'agit du fichier plat de texte juste bien (comme ' 123.45 '), mais lorsque la valeur est nulle, elle apparaît dans le fichier plat de destination comme ".00". J'ai besoin de savoir comment récupérer le premier zéro dans le fichier plat. P>
J'ai essayé divers types de données pour la sortie (dans le gestionnaire de connexion de fichier plat), y compris la devise et la chaîne, mais cela semble n'ont aucun effet. p>
J'ai essayé une instruction de cas dans mon sélection, comme ceci: p> (Résultats toujours dans ".00") J'ai essayé des variations sur cela comme ceci: p> (entraîne toujours ".00") p>
/ P> CASE WHEN columnValue = 0 THEN
convert(money, '0.00')
ELSE
convert(money, columnValue)
END
5 Réponses :
Pourriez-vous utiliser une colonne dérivée pour modifier le format de la valeur? Avez-vous essayé ça? P>
Ok, après un peu de lutte (pour convertir une chaîne numérique), cela a fonctionné. Merci soo!
J'avais exactement le même problème, et la réponse de Soo a fonctionné pour moi. J'ai envoyé mes données dans une transformation de colonne dérivée (dans la boîte à outils de transformation du flux de données). J'ai ajouté la colonne dérivée sous la forme d'une nouvelle colonne de type de données String Unicode ([dt_wstr]) et a utilisé l'expression suivante: p>
prix <1? "0" + (dt_wstr, 6) Prix: (dt_wstr, 6) Prix p>
J'espère que cela aide! p>
Merci user346389 ... L'inclusion de la syntaxe d'expression de colonne dérivée SSIS bizarre a été utile.
Juste attention aux nombres négatifs. -0.25 convient à -25 à partir de numérique à dt_wstr code>. Vous pouvez utiliser quelque chose de similaire à
[prix] <1? ([Prix]> = 0? "0" + (dt_wstr, 18) [Prix]: [Prix]> -1? "-0" + (dt_wstr, 18) (- - 1 * [Prix]): (DT_WSTR, 18) [Prix]): (dt_wstr, 18) [Price] code>
Étant donné que vous exportez vers un fichier texte, il suffit d'exporter des données préformatées.
Vous pouvez le faire dans la requête ou créer une colonne dérivée, tout ce que vous êtes plus à l'aise. P>
J'ai choisi de faire la colonne 15 caractères large. Si vous importez dans un système qui s'attend à ce qui s'attend à des numéros, ces zéros doivent être ignorés ... alors pourquoi ne pas simplement normaliser la longueur de champ? P>
Une solution simple en SQL est la suivante: P>
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
J'ai utilisé l'éditeur avancé pour modifier la colonne de float de double précision code> à
décimal code>, puis réglez la balance code> sur 2: p>
p>
Les zéros de la section de l'échelle de la décimale sont tronqués avec cette approche
J'aimerais connaître la cause de ce problème - je ne suis pas vraiment à l'aise avec la colonne dérivée.