我有一个大型数据文件,我正在通过SSIS运行。非常简单public void addAorB(A item){
//add to SetA
a.add(item);
}
public void addAorB(B item){
//add to SetB
b.add(item);
}
到XML source
。我很少使用SSIS,所以我远非专家。
我有一些记录,我推入错误表,因为日期不正确。
我想说的是,如果日期不是日期格式,请将此SQL database
更新为date
。
我不知道NULL
是否可行,但似乎应该给出我在网上阅读的例子。
我想在SSIS阶段修复此问题,而不是在数据加载到错误表后的SQL中。
答案 0 :(得分:1)
最好使用script component
而不是使用derived column
来实现此目标,因为Scripts
包含更多操作日期的选项。
如果要检查特定日期格式,可以使用DateTime.TryParseExact()方法,或使用DateTime.TryParse()尝试根据CultureInfo日期格式解析日期。
首先,您必须添加Script component
,将日期列标记为输入,创建类型为DT_DBTIMESTAMP
的新输出列
我将举两个例子:
假设输入列名称为inDate
且输出列为outDate
DateTime.TryParseExact()
Dim strFormats() As String = {"dd/MM/yyyy HH:mm:ss", "yyyy-MM-dd HH:mm:ss", "yyyyMMdd HH:mm:ss", "dd-MMM-yyyy HH:mm:ss", "MM/dd/yyyy HH:mm:ss"}
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.inDate_IsNull AndAlso
Not String.IsNullOrEmpty(Row.inDate) Then
Dim dtTemp As DateTime
If DateTime.TryParseExact(Row.inDate, strFormats, System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.outDate = dtTemp
Else
Row.outDate_IsNull = True
End If
End If
End Sub
DateTime.TryParse()
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.inDate_IsNull AndAlso
Not String.IsNullOrEmpty(Row.inDate) Then
Dim dtTemp As DateTime
If DateTime.TryParse(Row.inDate, System.Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dtTemp) Then
Row.outDate = dtTemp
Else
Row.outDate_IsNull = True
End If
End If
End Sub
您可以在此帖子中阅读有关使用SSIS脚本组件的日期时间转换的更多信息:
答案 1 :(得分:0)
您需要配置无法从文本转换为日期的组件的错误输出。
通常是 section{
width:100%;
height:100vh;
background-color: rgba(236, 240, 241,1.0);
}
div.container{
display: inline-block;
width:150px;
height:150px;
margin:10px;
background-color: rgba(189, 195, 199,1.0);
border-radius: 5px;
}
div.container:first-child{
margin-left: 20px;
}
div.container .load_1{
width:20px;
height:20px;
display: inline-block;
background-color: rgba(52, 152, 219,1.0);
}
或Data Conversion
组件。
如果您已经从源接收日期格式的列 - 它是您的Derived Column
组件。
1a上。双击您XML Source
或Data Conversion
组件,然后转到Derived Column
。
1b中。双击Configure Error Output
,转到XML Source
。
Error Output
和Error
选项更改为忽略失败。无法转换的值现在将包含NULL。
答案 2 :(得分:0)
SSIS表达式在日期和错误处理方面受到限制。相反,我建议使用脚本组件。
将以下内容添加到脚本中:
using System.Globalization;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
DateTime dateResult;
if (!DateTime.TryParse(Row.date, culture, DateTimeStyles.None, out dateResult))
{
Row.date = null;
}
}
日期列是一个字符串,在插入数据库之前,可以使用数据转换组件将其转换为Datetime。 文化被设置为美国英语,但这可以根据您的具体需求进行更改。该提示将接受本地时间格式,即MM / dd / yyyy。
如果TryParse()能够从输入字符串成功解析日期,则返回true。当它返回false时,我们只需将列设置为null。