Редактирование выражений в SSIS может быть болезненным. Я нахожу, когда они работают не так, как ожидалось, лучше разбить их на несколько переменных и заставить их питаться друг от друга.
Таким образом, я быстро определил, что ваша корневая проблема заключалась в том, что это выражение не генерирует действительное значение даты. Это порождало 61-20-3.xl
SUBSTRING(@[User::strExcelFileName],15,2) + "-"
+ SUBSTRING(@[User::strExcelFileName],18,2) + "-"
+ SUBSTRING(@[User::strExcelFileName],21,4)
Я создал переменную strExcelFileDate
типа строки, и я использовал выражение, чтобы создать строку, которая является 8 символов после подчеркивания.
SUBSTRING(@[User::strExcelFileName], FINDSTRING(@[User::strExcelFileName], "_", 1)+1, 8)
Это строковое значение, 06172013
, не может быть непосредственно приведён к дате, а жаль. Мне нужно было нарезать и нарезать эту строку во что-то, что может быть отнесено к типу данных даты. Была создана новая переменная с именем dtExcelFileDate с типом DateTime. Я использовал выражение для преобразования строки в yyyy-mm-dd, а затем передал все это в тип данных DT_DATE.
(DT_DATE) (RIGHT(@[User::strExcelFileDate], 4) + "-"
+ SUBSTRING(@[User::strExcelFileDate], 1,2)
+ "-" + RIGHT(SUBSTRING(@[User::strExcelFileDate],1,4), 2))
Чтобы нарисовать строку до даты, используйте функцию CONVERT(), а не прямую трансляцию. [Вот пример] (http://stackoverflow.com/a/1510131/425809). – Richard
@Richard Я считаю, что проблема, с которой сталкивается OP, заключается в том, что они хотели бы сделать это на языке выражения SSIS, а не в TSQL. – billinkc
А, я думаю, SSMS. Виноват. (У меня было ощущение, что я что-то пропустил ...) – Richard