Можем ли мы преобразовать строковый или символьный тип данных в int (или числовой) в SSIS?

Я нахожу это немного сложным. У меня есть исходная таблица и таблица назначения.

В исходной таблице есть один из столбцов с типом данных char длиной 2. В целевой таблице есть один из столбцов с типом данных int.

Задача состоит в том, чтобы перенести данные из источника в место назначения с помощью пакета SSIS. И в этом процессе я использую преобразование производного столбца для обработки этого преобразования.

Столбец в исходной таблице имеет значение «01», «02» или «03». Принимая во внимание, что столбец назначения, имеющий тип данных int, не может быть сопоставлен с исходным столбцом. Поскольку int распознает только «1». Я хочу только 1, 2 или 3 и опустить 0 в столбце назначения.

Я пробовал несколько вещей, как показано ниже.

Попытка №1:

SUBSTRING(COLNAME, 2, 1)

Это дает мне "1" из "01", но когда я это делаю

(DT_R4) SUBSTRING(COLNAME, 2, 1 )

Меня это полностью подводит.

Попытка №2:

Я пытаюсь бросить, как показано ниже.

(DT_DECIMAL, 2)(DT_R4) SUBSTRING(COLNAME, 2, 1 )

Это тоже не сработало.

Если есть выход, я ценю любое направление здесь.


person Binoy    schedule 20.03.2019    source источник
comment
А как насчет (DT_DECIMAL, 2) COLNAME? В данный момент у меня нет доступа к SSIS, но я уверен, что он будет доволен этим. Если вам это нужно как действительное, а не десятичное число, то сделайте (DT_R4)((DT_DECIMAL, 2) COLNAME).   -  person Larnu    schedule 21.03.2019
comment
@Larnu, почему бы и нет (DT_I4), также проблема может быть вызвана некоторыми пустыми или нулевыми значениями   -  person Hadi    schedule 21.03.2019
comment
Я ценю ваш намек здесь @Larnu. Поскольку я действительно намеревался привести к целочисленному типу данных, ваш второй приблизил меня к решению. Проголосовал. И @Hadi, спасибо, что поделились расширенным решением. Это идеально подходит для моего сценария, когда исходный столбец имеет значения NULL. И да, поскольку тип назначения целочисленный, лучше использовать (DT_I4)   -  person Binoy    schedule 21.03.2019


Ответы (2)


Поскольку целевой столбец имеет тип Integer DT_I4, вы должны использовать следующее выражение в производном столбце:

(DT_I4)[SourceColumn]

Также проверьте Nulls и пустые строки:

ISNULL([SourceColumn]) ? NULL(DT_I4): ([SourceColumn] == "" ? NULL(DT_I4): (DT_I4)[SourceColumn])
person Hadi    schedule 20.03.2019
comment
Это вполне осуществимо и соответствует запрошенному сценарию. Это идеальное разрешение. Также проголосовал. - person Binoy; 21.03.2019

Пробовали ли вы напрямую соединить исходные и конечные столбцы, не используя преобразование данных или преобразование производных столбцов? Я думаю, что он должен неявно преобразовывать из char в Integer, если все данные в исходной таблице являются числами, хотя тип данных - char.

person Sai Abhiram Inapala    schedule 20.03.2019
comment
Если исходный столбец содержит пустую строку ( != NULL), будет выдано исключение. - person Yahfoufi; 21.03.2019