Comment puis-je obtenir de Flux de Données SSIS de mettre '0.00' dans un fichier plat?
J'ai un package SSIS avec un Flux de Données qui prend un ADO.NET source de données (juste une petite table), exécute une requête select*, et les sorties les résultats de la requête dans un fichier plat (j'ai aussi essayé simplement de tirer l'ensemble de la table et non pas à l'aide d'un select SQL).
Le problème est que la source de données tire une colonne qui est un Argent de type de données, et si la valeur n'est pas nulle, il s'agit dans le texte de fichier plat très bien (comme "123.45"), mais lorsque la valeur est zéro, il apparaît dans le fichier plat de destination '.00'. J'ai besoin de savoir comment obtenir le zéro en arrière dans le fichier plat.
J'ai essayé différents types de données pour la sortie (dans le Gestionnaire de connexions de Fichiers Plats), dont la monnaie et de la chaîne, mais cela ne semble avoir aucun effet.
J'ai essayé un cas relevé dans mon select, comme ceci:
CASE WHEN columnValue = 0 THEN
'0.00'
ELSE
columnValue
END
(encore des résultats en ".00')
J'ai essayé de variations sur ce comme ceci:
CASE WHEN columnValue = 0 THEN
convert(decimal(12,2), '0.00')
ELSE
convert(decimal(12,2), columnValue)
END
(Encore des résultats en ".00')
et:
CASE WHEN columnValue = 0 THEN
convert(money, '0.00')
ELSE
convert(money, columnValue)
END
(résultats en ".0000000000000000000')
Ce stupide petit problème est killin' me. Quelqu'un peut-il me dire comment obtenir un zéro Argent de type de données valeur de base de données dans un fichier plat comme '0.00'?
OriginalL'auteur theog | 2010-05-19
Vous devez vous connecter pour publier un commentaire.
Pourriez-vous utiliser un Dérivé de Colonne pour modifier le format de la valeur? Avez-vous essayé?
Bon, après un peu de la lutte (pour convertir une valeur numérique en une chaîne), qui ont travaillé. Merci Soo!
OriginalL'auteur soo
J'ai eu exactement le même problème, et soo réponse a fonctionné pour moi. J'ai envoyé mes données dans une colonne dérivée de transformation (dans le Flux de Données de Transformer boîte à outils). J'ai ajouté la colonne dérivée dans une nouvelle colonne de type de données Chaîne Unicode ([DT_WSTR]), et a utilisé l'expression suivante:
Prix < 1 ? "0" + (DT_WSTR,6)Prix : (DT_WSTR,6)Prix
J'espère que ça aide!
OriginalL'auteur benjaminjsanders
J'ai utilisé l'éditeur avancé pour modifier la colonne de
double-precision float
àdecimal
et puis définissez laScale
à 2:OriginalL'auteur PeterX
Depuis que vous êtes à l'exportation vers un fichier texte, il suffit d'exporter les données préformatées.
Vous pouvez le faire dans la requête ou de créer une colonne dérivée, tout ce que vous êtes plus à l'aise avec.
J'ai choisi de faire la colonne de 15 caractères de large. Si vous importez dans un système qui attend les numéros de ces zéros doivent être ignorés...alors pourquoi ne pas uniformiser la longueur de champ?
Une solution simple en SQL est comme suit:
Il suffit de remplacer '0.00' à votre nom de colonne, et n'oubliez pas d'ajouter le from table_name, etc..
OriginalL'auteur John DaCosta