Как избежать полученной конверсионной ошибки даты колонки со стоимостью, содержащей ноли?

У меня есть файл разделенного текста запятой, который я импортирую в SQL-сервер 2008, используя пакет SSIS. Как часть пакета у меня есть полученная колонка, поскольку часть текстового файла - дата окончания. Проблема, которую я имею, состоит в том, если нет никакой даты окончания, текстовый файл имеет 00000000 вместо реальной даты такой как 20130207 . В моем полученном редакторе колонки у меня есть следующее выражение, которое хорошо работает для дат, которые не являются всем нолем.

(DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))

Кто-либо может предложить решение или помощь о том, как лучше всего обращаться с нолями?

1

2 ответы

Причина:

Полученное преобразование Колонки пытается преобразовать стоимость 00000000 на дату 00-00-0000 , который не рассматривают как действительную стоимость даты.

Выбор 1: колонка Базы данных позволяет ПУСТОЙ УКАЗАТЕЛЬ

Если ваша колонка базы данных определяется как ПУСТОЙ УКАЗАТЕЛЬ , что означает, что это может принять ПУСТОЙ УКАЗАТЕЛЬ ценности, изменить выражение в Полученная Колонка преобразование как следующее:

[Column 20] == "00000000" ? NULL(DT_DATE) : (DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))

Выбор 2: колонка Базы данных не позволяет ПУСТОЙ УКАЗАТЕЛЬ

Если ваша колонка базы данных определяется как NOT NULL , что означает, что это не может принять ПУСТОЙ УКАЗАТЕЛЬ ценности, изменить выражение в Полученная Колонка преобразование как следующее:

[Column 20] == "00000000" ? (DT_DATE) "1900-01-01" : (DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))
4
добавлено
Выбором 1 было прекрасное спасибо,
добавлено автор Silentbob, источник

Попробовать

[Column 20] = "00000000" ? (DT_DATE("19000101") : (DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))

Essentially, what its Попробоватьing to do is checking if the Column 20 is eight zeros then it associates a date 01-01-1900 otherwise it converts what it finds in Column 20

0
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)