SQL Server 2008 SSIS : Importing date field incorrectly (from Oracle)

标签 sql sql-server-2008 import ssis

我必须导入的文件 (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 设置为 stringUnicode 字符串 而不是 日期数据库日期 或任何其他特定于日期的类型: enter image description here

在数据流中,在源组件和目标组件之间放置脚本转换,如下所示: enter image description here

选择每个 DD-MMM-YY 日期列作为脚本转换的输入: enter image description here

并创建一个输出列,其 DataTypedate 对应于每个输入列: enter image description here

脚本转换代码将如下所示(使用 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/

相关文章:

mysql - 统计某个时间段内来自IP的 session 数

visual-studio-2008 - 如何获得 Visual Studio 2008 SP1 的投标?

sql - 在 SQL Server Management Studio 中保存带标题的结果

import - Cython cimport 和 __init__.pyx 有问题吗?

带有 PySDL2 的 Python - 找不到 SDL2 的任何库

php - 从html表格单元格分配php变量值

c# - LINQ 动态查询产生 'where AssignedUser is null'

sql - 如何评估 WHERE 子句中的输入

Haskell *限定*导入一组函数

mysql子查询引用外表