Я работаю над экспортом данных из 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
5 ответов
Вероятно, это связано с тем, что SQL Server не поддерживает 6 дробных цифр, поэтому приведите его к строке с 3 дробными цифрами в Teradata:
To_Char(myDate,'yyyy-mm-dd hh:mi:ss.ff3')
Если 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
Я нашел это решение, которое работает для меня в 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
Не используйте приведение на дату (время), используйте преобразование. Это будет работать только на вашем компьютере;) Как только вы столкнетесь с несколькими настройками культуры, это может не сработать из-за различных строковых представлений формата даты.
За пределами США вы очень скоро столкнетесь с такими ошибками. Многие системы разработки используют американские настройки, что упрощает просмотр сообщений об ошибках, но система заказчиков работает под локальными языковыми настройками и, в худшем случае, на разных языковых настройках для ОС и БД. Лучший способ справиться с этим - использовать внутренний формат ISO (120).
Загрузка данных из teradata в sql с помощью SSIS. Это работа для меня конвертировать Timestamp(6)
для datetime для сервера sql
To_Char(myDate,'yyyy-mm-dd hh:mi:ss.ff3')
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.