转换Teradata的时间戳(6),以日期时间为SQL Server
问题描述:
我正在从SSIS数据出口,我在我的项目之一有一个截断误差:转换Teradata的时间戳(6),以日期时间为SQL Server
[TH27 [91]] Error: "A truncation error occurred. Column name is '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模式的一个例子请求
答
这可能是因为SQL Server不支持6个小数位数,所以它与Teradata的3位小数转换为字符串:
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日期时间
答
我发现这个解决方案,在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(时间) ,使用convert。这只适用于你的机器;)当你必须处理多种文化设置时,这可能会失败,因为日期格式的字符串表示形式不同。
在美国以外,您很快就会遇到这样的错误。许多开发系统都使用美国设置,以便浏览错误消息,但客户系统在本地语言设置下运行,最糟糕的情况是在OS和DB的不同语言设置下运行。处理这个问题的最好方法是在内部使用ISO格式(120)。
我得到这个错误SELECT失败。 3706:语法错误:数据类型“datetime”与定义的类型名称不匹配。 我在teradata执行了这个请求 – Esperadoce
@Esperadoce我看到了,我已经看到了SSIS模式......现在还不确定... – JohnHC
@Esperadoce请参阅编辑 – JohnHC