在SSIS中将日期DD.MM.YYYY hh:mm:ss转换为YYYY-MM-DD

时间:2017-05-19 11:29:57

标签: sql-server datetime ssis ado.net etl

我正在开发一个SSIS包,它从SAP读取数据。我创建了ADO.Net来源,从ODBC connection读取数据。

SAP数据中,有一个表格,其中包含日期列,日期值的格式为12.03.2014 00:00:00

现在我想将其转换为日期时间格式YYYY-MM-DD

我可以在SQL command ADO.Net源工具中执行此操作吗?

3 个答案:

答案 0 :(得分:2)

--Yes you Can do it In SQL SERVER

Declare @Date Datetime
SET @Date='12.03.2014 00:00:00'

SELECT @Date=CONVERT(NVARCHAR(50),@Date,112)
SELECT @Date

答案 1 :(得分:2)

我真的不知道如何使用SQL驱动程序使用SAP驱动程序实现此目的,但这里有一些有用的信息

如果您使用的是 DateTime 数据类型,则日期时间不会与其格式一起存储,而是存储为数字或字符串(存储日期的方式很多(与使用的数据提供者有关);小数或两个整数,......)

有关详细信息,请查看:

日期格式与您的区域,应用程序,DBMS设置相关

如果要显示其他格式的日期,则必须更改相关设置。或者,您可以使用脚本组件将其转换为具有特定格式的String数据类型:

如果日期存储为字符串

如果Date列是一个字符串,则可以在脚本组件中使用DateTime.ParseExact方法。 (假设outDate是输出列,inDate是输入列)

using System;
using System.Globalization;


CultureInfo provider = CultureInfo.InvariantCulture;

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    Row.outDate = DateTime.ParseExact(Row.inDate,"dd.MM.yyyy HH:mm:ss",provider).ToString("yyyy-MM-dd");
}

有关此方法的更多信息,请参阅以下链接:

如果日期存储为日期

using System;
using System.Globalization;


CultureInfo provider = CultureInfo.InvariantCulture;

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    Row.outDate = Row.inDate.ToString("yyyy-MM-dd");
}

答案 2 :(得分:0)

采用驱动列组件并按预期转换日期,如下例所示:

(DT_STR,4,1252)DATEPART("yyyy",GETDATE()) + RIGHT("0" + "-" + (DT_STR,2,1252)DATEPART("mm",GETDATE()),2) + "-" + RIGHT("0" + (DT_STR,2,1252)DATEPART("dd",GETDATE()),2) 

enter image description here