派生列编辑器

时间:2010-06-08 10:03:39

标签: ssis

我需要将格式化日期分配给数据流中的列。我添加了一个派生形状,并为新列输入了以下表达式 - 派生列=“添加为新列”:

"BBD" + SUBSTRING((DT_WSTR,4)DATEADD("Day",30,GETDATE()),1,4) + 
SUBSTRING((DT_WSTR,2)DATEADD("Day",30,GETDATE()),6,2) + 
SUBSTRING((DT_WSTR,2)DATEADD("Day",30,GETDATE()),9,2)

问题是派生列转换编辑器会自动指定Unicode string[DT_WSTR]的数据类型和长度为“7”的数据类型。但是,字符串的长度为11,因此每次抛出以下异常:

[Best Before Date [112]] Error: The "component "Best Before Date" (112)" failed 
because truncation occurred, and the truncation row disposition on "output column
"Comments" (132)" specifies failure on truncation. A truncation error occurred 
on the specified object of the specified component.

有谁知道为什么编辑坚持7的长度?我似乎无法改变这一点。

非常感谢,

罗布。

5 个答案:

答案 0 :(得分:5)

我无法理解为什么SSIS正在测量该列只导致七个字符的字段 - 但是为了强制它为它提供一个11个字符的列,请稍微修改你的表达式:

(DT_WSTR,11)(“BBD”+ SUBSTRING((DT_WSTR,4)DATEADD(“Day”,30,GETDATE()),1,4)+ SUBSTRING((DT_WSTR, 2)DATEADD(“Day”,30,GETDATE()),6,2)+ SUBSTRING((DT_WSTR,2)DATEADD(“Day”,30,GETDATE()),9,2)

答案 1 :(得分:1)

你想要的是:

"BBD" + (DT_WSTR,4)YEAR(DATEADD("Day",30,GETDATE())) 
+ RIGHT("0" + (DT_WSTR,2)MONTH(DATEADD("Day",30,GETDATE())),2) 
+ RIGHT("0" + (DT_WSTR,2)DAY(DATEADD("Day",30,GETDATE())),2)

问题在于如何将日期转换为字符串。对DATEADD的调用会返回完整的日期和时间。时间。接下来,您可以使用(DT_WSTR,4)或(DT_WSTR,2)将该日期转换为4或2个字符的字符串。在我的系统上,将日期时间转换为字符串默认为“2011年8月24日下午4:18”。所以前4个字符会让你“8月”,前2个字符会让你“Au”。然后,您使用SUBSTRING提取子字符串。对于最后两次调用SUBSTRING,您将在您将日期转换为的2个字符串的末尾开始子字符串。这就是SSIS显示7个字符的原因:

"BBD" + "Aug " + "" + ""
  3   +    4   +  0 +  0  =  7

最好使用内置函数从日期时间中提取年,月和日,而不是转换为字符串,然后抓取子字符串。如果您真的想要使用子字符串,则需要添加对CONVERT的调用以将日期时间转换为特定的字符串格式,否则您将获得Windows中语言环境设置的默认值。每台PC都可能有所不同。

答案 2 :(得分:0)

你是否正在替换你现有的领域,那个领域可能是7个字符长吗?派生列转换的一点是您无法更改现有字段的字段类型(包括长度)。

尝试添加新字段。

如果这不起作用,请尝试在整个表达式周围添加显式强制转换。

(DT_WSTR,11)("BBD" + SUBSTRING((DT_WSTR,4)DATEADD("Day",30,GETDATE()),1,4) + SUBSTRING((DT_WSTR,2)DATEADD("Day",30,GETDATE()),6,2) + SUBSTRING((DT_WSTR,2)DATEADD("Day",30,GETDATE()),9,2))

答案 3 :(得分:0)

您使用的SQL版本和服务包是什么?

我刚刚在我的机器上尝试了这个,并且将结果大小从7更改为11.没有问题。您是否可能未安装所有服务包?

答案 4 :(得分:0)

右键点击" Derived Column"打开"显示高级编辑器"选择"输入和输出属性"标签。
得到"派生列输出" => "输出列" => "派生专栏1" (由你补充)

在右侧面板中,转到"数据类型属性"节=>数据类型=>

选择"字符串[DT_STR]

单击“确定Image showing steps

这将解决您的问题。

enter image description here