Как получить поток данных SSIS, чтобы поместить '0.00' в плоский файл?
у меня есть пакет служб SSIS с потоком данных, который принимает ADO.NET источник данных (только небольшая таблица), выполняет запрос select * и выводит результаты запроса в плоский файл (я также пытался просто вытащить всю таблицу и не использовать SQL select).
проблема в том, что источник данных тянет столбец, который является типом данных Money, и если значение не равно нулю ,оно входит в текстовый плоский файл просто отлично( например, "123.45"), но когда значение равно нулю, оно появляется в месте назначения плоский файл как '.00'. Мне нужно знать, как вернуть начальный ноль в плоский файл.
Я пробовал различные типы данных для вывода (в Диспетчере соединений с плоскими файлами), включая валюту и строку, но это, похоже, не имеет никакого эффекта.
Я пробовал оператор case в моем select, например:
CASE WHEN columnValue = 0 THEN
'0.00'
ELSE
columnValue
END
(все-таки результаты.00')
Я пробовал варианты этого, как это:
CASE WHEN columnValue = 0 THEN
convert(decimal(12,2), '0.00')
ELSE
convert(decimal(12,2), columnValue)
END
(все еще приводит к '.00')
и:
CASE WHEN columnValue = 0 THEN
convert(money, '0.00')
ELSE
convert(money, columnValue)
END
(результаты '.0000000000000000000')
эта глупая маленькая проблема убивает меня. Может ли кто-нибудь сказать мне, как получить нулевое значение базы данных типа данных Money в плоский файл как "0.00"?
4 ответов
У меня была точно такая же проблема, и ответ Су работал для меня. Я отправил свои данные в производное преобразование столбцов (в панели инструментов преобразования потока данных). Я добавил производный столбец в качестве нового столбца типа данных Unicode String ([DT_WSTR]) и использовал следующее выражение:
Цена
надеюсь, это поможет!
я использовал расширенный редактор, чтобы изменить столбец с double-precision float
до decimal
и выберите Scale
в 2:
поскольку вы экспортируете в текстовый файл, просто экспортируйте предварительно отформатированные данные.
вы можете сделать это в запросе или создать производный столбец, независимо от того, что вам удобнее.
Я решил сделать столбец шириной 15 символов. Если вы импортируете в систему, которая ожидает числа, эти нули следует игнорировать...так почему бы просто не стандартизировать длину поля?
простое решение в SQL выглядит следующим образом:
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
просто замените '0.00' с имя столбца и не забудьте добавить FROM table_name и т. д..