我必须导入的文件 (CSV) 中的日期字段格式DD-MMM-YY
为 ,SQL Server 将它们导入为YY-MM-DD
. 所以01-FEB-13
导入为2001-02-13
.
如何更改 SQL 用于导入日期的格式?
我无权访问原始 Oracle 数据库,只能访问从中导出的平面文件。所以我所做的几乎所有事情都必须在 SQL 中完成。
我必须导入的文件 (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
orUnicode string
而不是date
,database date
或任何其他特定于日期的类型:
在您的数据流中,在源组件和目标组件之间放置一个脚本转换,如下所示:
选择每个 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);
}
}
您可以使用 oracle 中的 to_char() 函数来格式化您的日期,以便它们采用您想要的格式。希望 Gordon 关于存储为文本的评论指的是临时表。出于各种原因,无论如何,您的第一次导入都应该是临时表。