我需要将格式化日期分配给数据流中的列。我添加了一个派生形状,并为新列输入了以下表达式 - 派生列=“添加为新列”:
"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的长度?我似乎无法改变这一点。
非常感谢,
罗布。
答案 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]
这将解决您的问题。