Как мне получить поток данных SSIS, чтобы поместить «0,00» в плоский файл? - PullRequest
9 голосов
/ 19 мая 2010

У меня есть пакет служб SSIS с потоком данных, который принимает источник данных ADO.NET (просто небольшую таблицу), выполняет запрос select * и выводит результаты запроса в плоский файл (я также пытался просто извлечь всю таблицу и не используя SQL select).

Проблема заключается в том, что источник данных извлекает столбец с типом данных Money, и если значение не равно нулю, оно просто отлично попадает в текстовый плоский файл (например, 123.45), но когда значение равно нулю он отображается в плоском файле назначения как «.00». Мне нужно знать, как вернуть ведущий ноль в плоский файл.

Я пробовал различные типы данных для вывода (в Диспетчере соединений с плоскими файлами), включая валюту и строку, но, похоже, это не имеет никакого эффекта.

Я пробовал в своем выделении оператор case, например:

  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 ]

9 голосов
/ 20 мая 2010

Не могли бы вы использовать производный столбец, чтобы изменить формат значения? Вы пробовали это?

8 голосов
/ 20 мая 2010

У меня возникла та же проблема, и ответ Су на меня сработал. Я отправил свои данные в производное преобразование столбца (в наборе инструментов преобразования потока данных). Я добавил производный столбец как новый столбец типа данных Unicode String ([DT_WSTR]) и использовал следующее выражение:

Цена <1? "0" + (DT_WSTR, 6) Цена: (DT_WSTR, 6) Цена </p>

Надеюсь, это поможет!

3 голосов
/ 23 марта 2015

Я использовал расширенный редактор, чтобы изменить столбец с double-precision float на decimal, а затем установил Scale в 2:

enter image description here

1 голос
/ 20 мая 2010

Поскольку вы экспортируете в текстовый файл, просто экспортируйте данные в предварительно отформатированном виде.

Вы можете сделать это в запросе или создать производный столбец, с чем вам удобнее.

Я решил сделать столбец шириной 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 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...