Я работаю над экспортом данных из SSIS, и у меня есть ошибка усечения в одном из моих проектов:

[TH27 [91]] Ошибка: «Произошла ошибка усечения. Имя столбца« mydate ».»

Во входных данных (Teradata) у меня есть столбец типа timestamp(6), а в выходных данных в SQL Server - столбец типа datetime.

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

Моя попытка (запрос 1):

SELECT 
    column1,
    CAST(CAST(CAST(mydate AS DATE FORMAT 'YYYY-MM-DD') AS CHAR(10)) || ' ' 
             || TRIM(EXTRACT(HOUR FROM (mydate))) || ':'
             || TRIM(EXTRACT(MINUTE FROM (mydate))) || ':'
             || TRIM(CAST(EXTRACT(SECOND FROM (mydate)) AS INTEGER)) AS Date) AS mydate,
    column2
FROM table1

< Сильный > Update :

Запрос, который я написал, был в источнике Teradata, вот пример моей схемы SSIS

My SSIS Schema

5
Esperadoce 1 Сен 2017 в 12:15

5 ответов

Лучший ответ

Вероятно, это связано с тем, что SQL Server не поддерживает 6 дробных цифр, поэтому приведите его к строке с 3 дробными цифрами в Teradata:

To_Char(myDate,'yyyy-mm-dd hh:mi:ss.ff3')
2
dnoeth 1 Сен 2017 в 10:20

Если mydate является меткой времени, просто приведите ее:

select column1,
       cast(mydate as datetime) as column2
from MyTable

Итак, выполнение в teradata означает, что у вас нет даты и времени ... Но у вас есть дата и время:

select column1,
       cast(mydate as date) as column2date,
       cast(mydate as time) as column2time
from MyTable

Затем вы можете использовать ssis для управления данными, чтобы объединить дату и время в MSSQL datetime

1
JohnHC 1 Сен 2017 в 09:50

Я нашел это решение, которое работает для меня в SSIS - удалить последнюю часть, которая есть у нас в timestamp(6), и преобразовать ее после этого в timestamp(0).

select column1,
       CAST(SUBSTRING(CAST(mydate AS CHAR(26)) FROM 1 FOR 19) AS TIMESTAMP(0))
       as mydate 
from MyTable
0
Esperadoce 1 Сен 2017 в 10:14

Не используйте приведение на дату (время), используйте преобразование. Это будет работать только на вашем компьютере;) Как только вы столкнетесь с несколькими настройками культуры, это может не сработать из-за различных строковых представлений формата даты.

За пределами США вы очень скоро столкнетесь с такими ошибками. Многие системы разработки используют американские настройки, что упрощает просмотр сообщений об ошибках, но система заказчиков работает под локальными языковыми настройками и, в худшем случае, на разных языковых настройках для ОС и БД. Лучший способ справиться с этим - использовать внутренний формат ISO (120).

0
crumble 1 Сен 2017 в 11:30

Загрузка данных из teradata в sql с помощью SSIS. Это работа для меня конвертировать Timestamp(6) для datetime для сервера sql

To_Char(myDate,'yyyy-mm-dd hh:mi:ss.ff3')
0
Suraj Rao 7 Май 2019 в 07:24