用于将字符串转换为日期的SSIS表达式
使用SQLServer2008、VisualStudio2008 正在尝试将数据从字符串列转换为派生日期列。 字符串可以有两种格式,一种是“dd/mm/yy”(可以假定为世纪20),另一种是“dd/mm/yyyy”。e、 g.“2012年5月2日”、“2002年12月23日”、“2012年8月13日” 所以我对派生列尝试了如下表达式:用于将字符串转换为日期的SSIS表达式,ssis,Ssis,使用SQLServer2008、VisualStudio2008 正在尝试将数据从字符串列转换为派生日期列。 字符串可以有两种格式,一种是“dd/mm/yy”(可以假定为世纪20),另一种是“dd/mm/yyyy”。e、 g.“2012年5月2日”、“2002年12月23日”、“2012年8月13日” 所以我对派生列尝试了如下表达式: DateReceived == "" ? NULL(DT_DATE) : (DT_DATE)((LEN(RTRIM(DT_DATE)) == 10 ? SUBST
DateReceived == "" ? NULL(DT_DATE) : (DT_DATE)((LEN(RTRIM(DT_DATE)) == 10 ? SUBSTRING(DateReceived,7,4) : ("20" + SUBSTRING(DateReceived,7,2))) + "-" + SUBSTRING(DateReceived,4,2) + "-" + SUBSTRING(DateReceived,1,2))
但Visual Studio给出了错误:
表达式无效,或内存不足错误
它接受一个更简单的表达式,如:
DateReceived == "" ? NULL(DT_DATE) : (DT_DATE)("20" + SUBSTRING(DateReceived,7,2) + "-" + SUBSTRING(DateReceived,4,2) + "-" + SUBSTRING(DateReceived,1,2))
但此表达式仅适用于“dd/mm/yy”格式
我做错了什么?谢谢。没关系,错误是由于打字错误造成的。(正在对列类型而不是列名调用RTRIM) 以下工作:
DateReceived == "" ? NULL(DT_DATE) : (DT_DATE)((LEN(RTRIM(DateReceived)) == 10 ? SUBSTRING(DateReceived,7,4) : ("20" + SUBSTRING(DateReceived,7,2))) + "-" + SUBSTRING(DateReceived,4,2) + "-" + SUBSTRING(DateReceived,1,2))