将 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')
我正在从 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')