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

3
我正在开发一个SSIS包,它从SAP中读取数据。我已经创建了一个ADO.Net源,该源从ODBC连接中读取数据。
从SAP数据中,有一个表格具有日期列,日期值的格式为12.03.2014 00:00:00。
现在我想将其转换为datetime格式YYYY-MM-DD。
我能在ADO.Net源工具的SQL命令中完成这个操作吗?

尝试使用以下代码:REPLACE((DT_WSTR, 10)(DT_DBDATE)GETDATE(),"-","") - user7715598
谢谢您的回复,让我试试这个。 - User5590
@Srini131 收到以下错误 - ERROR [42000] [IBM] [System i Access ODBC Driver] [DB2 for i5 / OS] SQL0104 - Token DT_WSTR 无效。有效的标记是:(. (CWBODBC.DLL) - User5590
3个回答

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

用户在SSIS中提问。 - user7715598
@Srini131 实际上问的是:我能在 ADO.Net 源工具的 SQL 命令中做到这一点吗? - iamdave
112 可以得到 YYYYMMDD,你可以使用 126 并在其左侧添加连字符。但我不确定这种语法是否适用于 SAP 的驱动程序。 - Mark Wojciechowicz

1
我不太清楚如何使用SAP驱动程序和SQL命令来实现这一点,但以下是一些有用的信息。
如果您正在使用DateTime数据类型,则DateTime不会以其格式存储,而是以数字或字符串值存储(与所使用的数据提供程序相关)。有许多存储日期的方式(小数或两个整数等)。
欲了解更多信息,请参阅:

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

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

如果日期以字符串形式存储,可以在脚本组件中使用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");
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接