我正在使用带有日期时间戳的文件名的下面的表达式。
(DT_I4)DATEPART("weekday", GETDATE() ) ==2 || (DT_I4)DATEPART("weekday",@[System::StartTime]) ==7 ?
Replace((DT_STR, 20, 1252)(DATEADD( "D", -3,@[System::StartTime])),":","-") + ".xls" :
Replace((DT_STR, 20, 1252)(DATEADD( "D", -1,@[System::StartTime])),":","-") + ".xls"
这将给我以前的日期总是我的需要。
但是当我将文件名附加到此表达式时,它会给我以下错误 -
"FILENAME"+
(DT_I4)DATEPART("weekday", GETDATE() ) ==2 || (DT_I4)DATEPART("weekday",@[System::StartTime]) ==7 ?
Replace((DT_STR, 20, 1252)(DATEADD( "D", -3,@[System::StartTime])),":","-") + ".xls" :
Replace((DT_STR, 20, 1252)(DATEADD( "D", -1,@[System::StartTime])),":","-") + ".xls"
错误 - 数据类型“DT_WSTR”和“DT_I4”与二进制运算符“+”不兼容。操作数类型无法隐式转换为操作的兼容类型。要执行此操作,需要使用强制转换运算符显式转换一个或两个操作数。
尝试设置二进制操作的结果类型“@ [User :: AnimalName] +(DT_I4)DATEPART(”weekday“,@ [System :: StartTime])”失败,错误代码为0xC0047080。
(Microsoft.DataTransformationServices.Controls)
答案 0 :(得分:1)
正如它所述,你不能隐含地将整数和字符串值放在一起。解决方案是将整个三元运算符强制转换为DT_WSTR类型。是的,你确实将每个选项都转换为DT_STR,但你仍然将整个事件包装在一个演员表中。这很奇怪,但我之前遇到过同样的事情。
"FILENAME"+
(DT_WSTR, 20)
(
(DT_I4)DATEPART("weekday", GETDATE() ) ==2
|| (DT_I4)DATEPART("weekday",@[System::StartTime]) ==7 ?
Replace((DT_STR, 20, 1252)(DATEADD( "D", -3,@[System::StartTime])),":","-") + ".xls"
:
Replace((DT_STR, 20, 1252)(DATEADD( "D", -1,@[System::StartTime])),":","-") + ".xls"
)