2017-09-01 7 views
4

私はSSISからのデータ輸出に取り組んでいる、と私は私のプロジェクトの一つで打ち切り誤差があります。入力でSQL Serverのdatetime型にTeradataのタイムスタンプ(6)を変換

[TH27 [91]] Error: "A truncation error occurred. Column name is 'mydate'."

(テラ) 、私はタイプ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スキーマ

My SSIS Schema

の例です mydateがタイムスタンプである

答えて

1

それはおそらくです:

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

場合は、ちょうどそれをキャスト:

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

オクラホマので、Teradataの中で実行すると、日時を持っていないことを意味します...しかし、あなたは、日付と時刻を持っています:

あなたはその後、結合するためにデータを操作するために、SSISを使用することができます
select column1, 
     cast(mydate as date) as column2date, 
     cast(mydate as time) as column2time 
from MyTable 

日付と時刻をMSSQLの日時に変換する

+0

私は、SELECTに失敗しました。このエラーを得ました。 3706:構文エラー:データ型 "datetime"が定義済みの型名と一致しません。 私は私が見るのTeradata – Esperadoce

+0

@Esperadoceでこの要求を実行し、私は今... – JohnHC

+1

は私のために働く編集 – JohnHC

0

SSISの私には、timestamp(6)の最後の部分を削除し、それ以降はtimestamp(0)に変換するというこの解決策が見つかりました。 SQL Serverは、6小数点以下の桁をサポートするので、Teradataの上の3小数点以下の桁の文字列にキャストしていないため

select column1, 
     CAST(SUBSTRING(CAST(mydate AS CHAR(26)) FROM 1 FOR 19) AS TIMESTAMP(0)) 
     as mydate 
from MyTable 
0

日にキャストを使用しないでください(時間) 、convertを使用します。これはあなたのマシンでのみ動作します;)複数の文化設定に対処しなければならないと、日付フォーマットの異なる文字列表現が原因で失敗することがあります。

米国外では、あなたはこのようなエラーに非常にすぐに実行されます。多くの開発システムは米国の設定を使用してエラーメッセージの参照を容易にしますが、カスタマーシステムはローカル言語設定で実行され、最悪の場合OSとDBの言語設定が異なります。これを処理する最善の方法は、内部的にISOフォーマット(120)を使用することです。

関連する問題