【问题标题】:SSIS to SQL Server data import and conversion issueSSIS 到 SQL Server 数据导入和转换问题
【发布时间】:2017-08-18 10:07:46
【问题描述】:

我是 SQL Server 2014 的初学者。我需要一些关于从 SSIS 到 SQL Server 的数据类型转换的建议。

我正在使用 DATETIME 列,示例值为“2017-08-17 16:00:50”,格式为“YYYYMMDDHHMMSSsss”

在 SSIS 中我使用了数据类型 Unicode string [DT_WSTR],在 SQL Server 中我使用了数据类型 NVARCHAR

当我尝试从 SSIS 导入数据时,它会将日期格式从 2017-08-17 16:00:50 更改为 17/08/2017 4:00:50 PM。我如何防止这种情况以及当我尝试使用强制转换将 varchar 日期转换为日期时间格式时,或者像这样进行转换:

使用转换

select 
    convert(datetime, [LastUpdateDateTime], 109) as [LastUpdateDateTime]
from 
    mytable

我得到这个错误:

消息 241,第 16 级,状态 1,第 2 行
从字符串转换日期和/或时间时转换失败。

有演员表

select 
    cast([LastUpdateDateTime] as datetime) as [LastUpdateDateTime]
from 
    mytable

我得到这个错误:

消息 242,第 16 级,状态 3,第 2 行
将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。

请指教,

【问题讨论】:

  • 您在哪里看到“17/08/2017 4:00:50 PM”?在 SSIS 查看器中?在预览窗口中?在数据库中?您是否将其加载到数据库中的日期时间字段中?真实日期没有格式。它只是您正在查看的工具将对其施加格式。永远不要使用 cast 来转换日期。使用converttry_convert,以及来自此处docs.microsoft.com/en-us/sql/t-sql/functions/… 的日期时间代码。永远不要将日期加载到 varchar 字段中。始终将其加载到日期或日期时间字段中
  • 如果您有DATETIME - 将其保留为DATETIME,请勿将其转换/存储为NVARCHAR !!另外:SQL Server 中的DATETIME 没有无格式,因为它是一个正在存储的8 字节二进制值。仅当您需要显示值时才会进行格式化 - 您可以按照自己喜欢的方式进行处理。

标签: sql sql-server ssis


【解决方案1】:

您应该在转换中使用日期样式 103
试试这个:

Declare @dt nvarchar(50)=CONVERT(nvarchar(50),[LastUpdateDateTime],103)
SELECT CONVERT(DATETIME2(0), @dt, 103)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多