【问题标题】:String date to YYYY-MM-DD string format字符串日期到 YYYY-MM-DD 字符串格式
【发布时间】:2018-07-31 08:38:17
【问题描述】:

我正在使用SSIS 2013,并且我正在使用字符串变量来存储从文件创建的日期...

我的问题是我得到了字符串值Jan 25 2018 12:00:00,当我将数据加载到数据库中时,该列需要字符串值2018-01-25。如何在派生列任务中转换变量?

【问题讨论】:

  • as.character(strptime("Jan 25 2018 12:00:00","%b %d %Y"))
  • 我认为 strptime 在 SSIS/SSDT/BIDS/我们今天所称的任何东西中都不是一个有效的函数。
  • 永远不要将数据库中的日期存储为字符串。除非你有充分的理由。数据库中的列是什么数据类型?在不知道的情况下很难给出可靠的答案

标签: sql-server tsql datetime ssis etl


【解决方案1】:

使用派生列

据此Microsoft article

当字符串转换为 DT_DATE 时,或反之亦然,使用转换的语言环境。但是,无论区域设置首选项是否使用 ISO 格式,日期都是 YYYY-MM-DD 的 ISO 格式。

因此您可以在派生列中简单地使用以下表达式:

SUBSTRING( (DT_STR,50, 1256)(DT_DATE)[DateColumn], 1, 10)

使用脚本组件

假设inDate 是输入列,OutDate 是输出列

using System;
using System.Globalization;


CultureInfo provider = CultureInfo.InvariantCulture;

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

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多