2013-06-17 5 views
1

Мое выражение, как следующее:Выражение SSIS для сравнения даты?

DATEDIFF("dd",(DT_DATE)(SUBSTRING(@[User::strExcelFileName],15,2) + "-" + SUBSTRING(@[User::strExcelFileName],18,2) + "-" + SUBSTRING(@[User::strExcelFileName],21,4)),GETDATE()) > @[User::intDaysCount] 

Мой файл: TempConfigPr_06172013.xlsx

Проблема это говорит ошибка при переходе от «DT_WSTR» для типа данных «DT_DATE» ... Может какой-либо один, пожалуйста, помощь, где я ошибаюсь и как это решить?

Примечание: Я проверил, это выражение работает нормально.

DATEDIFF("dd",(DT_DATE)("11-18-2010"),GETDATE()) > @[User::intDaysCount] 
+0

Чтобы нарисовать строку до даты, используйте функцию CONVERT(), а не прямую трансляцию. [Вот пример] (http://stackoverflow.com/a/1510131/425809). – Richard

+0

@Richard Я считаю, что проблема, с которой сталкивается OP, заключается в том, что они хотели бы сделать это на языке выражения SSIS, а не в TSQL. – billinkc

+0

А, я думаю, SSMS. Виноват. (У меня было ощущение, что я что-то пропустил ...) – Richard

ответ

2

Редактирование выражений в 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)) 
Смежные вопросы