Преобразование временной метки терадата (6) в datetime для SQL Server

Я работаю над экспортом данных из 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 

Обновить:

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

Моя схема SSIS

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

 To_Char(myDate,'yyyy-mm-dd hh:mi:ss.ff3') 

Если mydate – это метка времени, просто 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

Я нашел это решение, которое работает для меня в 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 

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

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

  • существование контрольной таблицы в базах данных РСУБД
  • Копирование записей из одной базы данных в другую (Teradata на SQL Server)
  • Как правильно перебирать курсор в sqad teradata?
  • Самый быстрый способ найти Quotient, разделив два числа
  • Interesting Posts

    Выберите данные из нескольких баз данных в переменную таблицы

    Выберите Максимальное значение для каждой записи в SQL

    Помогите интерпретировать вывод DBCC CHECKDB, связанный с Torn Pages

    SQL Server различная производительность запросов

    Лучший способ сделать вложенную логику case case в SQL Server

    Какие преимущества безопасности предоставляются с помощью хранимых процедур для доступа к данным?

    Удалить пробелы из значения поля

    Множественные значения столбцов в разделе where

    Горизонтальный столбец запроса

    Как перемещать строки из таблицы A в B и выбирать только перемещенные строки из A?

    Получение XML-данных, хранящихся в varchar из SQL

    Диаграмма для контрольных данных не рассчитывается должным образом

    базовые таблицы сервера sql

    Запустить локальный файл сценария SQL из командной строки Windows для обновления удаленной базы данных SQL Server

    XML Parsing & T-SQL

    Давайте будем гением компьютера.