0

嗨,我正在使用下面的表达式作为带有日期时间戳的文件名。

(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)

4

1 回答 1

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"
)
于 2013-07-08T02:05:28.610 回答