【发布时间】: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 来转换日期。使用
convert或try_convert,以及来自此处docs.microsoft.com/en-us/sql/t-sql/functions/… 的日期时间代码。永远不要将日期加载到 varchar 字段中。始终将其加载到日期或日期时间字段中 -
如果您有
DATETIME- 将其保留为DATETIME,请勿将其转换/存储为NVARCHAR!!另外:SQL Server 中的DATETIME没有无格式,因为它是一个正在存储的8 字节二进制值。仅当您需要显示值时才会进行格式化 - 您可以按照自己喜欢的方式进行处理。
标签: sql sql-server ssis