将 SQL 服务器的 teradata timestamp(6) 转换为日期时间

Converting teradata timestamp(6) to datetime for SQL Server

我正在从 SSIS 导出数据,我的一个项目出现截断错误:

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

在输入 (Teradata) 中,我有一个类型为 timestamp(6) 的列,在 SQL 服务器的输出中,我有一个类型为 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 模式的示例

如果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

可能是因为SQL服务器不支持6位小数,所以在Teradata上转成3位小数的字符串:

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

不要对日期(时间)使用转换,使用转换。这仅适用于您的机器 ;) 一旦您必须处理多种文化设置,这可能会失败,因为日期格式的不同字符串表示形式。

在美国以外的地区,您很快就会 运行 陷入此类错误。许多开发系统使用美国设置太容易浏览错误消息,但客户系统 运行s 在本地语言设置下,最糟糕的是 OS 和数据库的不同语言设置。处理此问题的最佳方法是在内部使用 ISO 格式 (120)。

在 SSIS 的帮助下将数据从 teradata 加载到 sql。 这对我有用 convert Timestamp(6) for datetime for sql server

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