Удаление ведущих нулей в SSIS - PullRequest
0 голосов
/ 08 марта 2012

Я обрабатываю данные из устаревшей системы с помощью служб SSIS перед импортом данных в базу данных SQL Server 2008. Поле валюты имеет такой формат:

000000xxx.xx

Мне нужно удалить ведущие нули. Обратите внимание, что фактическое значение валюты не имеет фиксированного числа цифр. Так, например, это может быть xxxxx.xx или x.xx или xxxxxxxxxxx.xx

Я нашел этот ответ , но инструмент производного столбца отображает только ограниченные строковые функции, такие как мастер формул Access.

Итак, мой вопрос:

  • как мне использовать PATINDEX в инструменте производных столбцов DTS
  • в противном случае, как я могу удалить начальные нули из входного столбца

Ответы [ 2 ]

1 голос
/ 08 марта 2012

как вы запрашиваете данные?Я полагаю, вы используете прямой доступ к таблицам в своем компоненте OleDBSource, верно?Я не советую, потому что небольшое изменение в таблице может сломать ваш пакет.

Я бы выбрал представление, содержащее выбор из исходной таблицы, и в этом выборе я использовал бы функцию PATINDEX и внутри пакетаЯ бы выбрал вид вместо таблицы.

Это хороший подход, потому что если вам нужно внести незначительное изменение, вы можете изменить представление вместо пакета

Если вы не хотите писать представление, хорошо, вместо выбора"режим доступа к данным" = "таблица или представление", выберите "команда sql" и напишите свой sql непосредственно в пакет.

0 голосов
/ 09 марта 2012

Вы не можете преобразовать данные в числовой эквивалентный тип в исходной системе? Это должен быть быстрый способ отбросить ведущие нули. SELECT CAST(myCurrency AS decimal(18,2)) AS leadingZerosDropped FROM myTable

В противном случае, мертвый простой способ SSIS сделать это - использовать задачу преобразования данных и привести ее к числовому типу (DT_CY / Currency или DT_Numeric / Numeric работали просто отлично)

Исходный запрос

SELECT '000000111.11' AS stringCurrency
UNION ALL SELECT '0.22'
UNION ALL SELECT '03.33'
UNION ALL SELECT '004.44'
UNION ALL SELECT '0005.55'
UNION ALL SELECT '00000000000000000006.66'

Преобразование данных преобразования

Я создал новый столбец currencyCurrency, который представлял собой stringCurrency с примененным типом данных валюты [DT_CY].

Результаты

stringCurrency            currencyCurrency
000000111.11              111.11
0.22                      0.22
03.33                     3.33
004.44                    4.44
0005.55                   5.55
00000000000000000006.66   6.66

Я полностью поддерживаю не использовать режим доступа к таблице, и в целом я поддерживаю перенос работы на исходную систему, но это кажется маловероятным, если исходная система не позволяет преобразование или если вам приходится прибегать шутить со строками.

...