我必须导入的文件 (CSV) 中的日期字段采用 DD-MMM-YY
格式,SQL Server 将其导入为 YY-MM-DD
。因此,01-FEB-13
将导入为 2001-02-13
。
如何更改 SQL 用于导入日期的格式?
我无权访问原始 Oracle 数据库,只能访问从中导出的平面文件。所以我所做的几乎所有事情都必须在 SQL 中完成。
最佳答案
更改 SQL Server 默认使用的日期格式需要修改 Windows 服务器区域性设置。 不是一个好主意,特别是如果这是您遇到此问题的唯一文件。
我将使用脚本转换和 .NET Framework 的 DateTime.ParseExact方法,它可以让您完全控制预期的格式。首先配置用于读取 CSV 文件的平面文件连接管理器,以便将日期为 DD-MMM-YY 的列的 DataType
设置为 string
或 Unicode 字符串
而不是 日期
、数据库日期
或任何其他特定于日期的类型:
在数据流中,在源组件和目标组件之间放置脚本转换,如下所示:
选择每个 DD-MMM-YY 日期列作为脚本转换的输入:
并创建一个输出列,其 DataType
为 date
对应于每个输入列:
脚本转换代码将如下所示(使用 C#)
using System;
using System.Data;
using System.Globalization; // needed for CultureInfo.InvariantCulture
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
public override void IncomingRows_ProcessInputRow(IncomingRowsBuffer Row)
{
string incomingFormat = "dd-MMM-yy";
Row.ConvertedCreateDate = DateTime.ParseExact(
Row.CreateDate,
incomingFormat,
CultureInfo.InvariantCulture);
Row.ConvertedLastUpdateDate = DateTime.ParseExact(
Row.LastUpdateDate,
incomingFormat,
CultureInfo.InvariantCulture);
}
}
关于SQL Server 2008 SSIS : Importing date field incorrectly (from Oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091642/