6

有没有办法在 SSIS 派生列中复制以下表达式?

SELECT CASE
           WHEN LEN(column1) > 8
               THEN
                   column1
               ELSE
                   REPLICATE('0', 18 - LEN(column1)) + column1
           END AS column1
FROM myTable

如果值的长度小于 8 个字符,我想用 0 填充 column1 的值

4

3 回答 3

12

SSIS 表达式语言支持三元运算符? :

(LEN([column1]) > 8) ? column1 : replicate("0", (18 - LEN([column1]))) + [column1]

该表达式应该起作用,但它不起作用,因为 REPLICATE 调用将提供元数据,说明它是 4k nvarchar 字符(限制)。如果您不希望它以这种方式工作,请发表评论,我将在连接之前修改表达式以调整复制的输出column1

一种更简单的方法是始终在表达式中添加 8 个前导零,然后从右侧将其切掉。

RIGHT(REPLICATE("0",8) + column1,8)

您可能第二次需要 18,因为您的示例似乎使用了 18,但概念是相同的。

于 2013-01-23T19:21:40.690 回答
0

这是一个老问题,但我今天也有同样的问题,下面的派生列表达式对我有用。它没有专门“复制”原始问题中的 SQL 示例(通过使用“REPLICATE”),但我发现下面的内容对于使用数据流中的 SSIS 派生列填充值要简单一些,而且它很好一个简单的“If / Else”语句的示例。我用 10 个零填充,因为这就是 SQL 在原始问题中所做的。

(LEN(column1) > 8) ? column1 : ("0000000000" + (column1))
于 2016-08-09T23:01:39.663 回答
0

解决方案在这里:我从列下拉列表中将组作为一列,然后得出这些条件。如果组是“Cash Capex”然后是“Capex”并且其中“Internal Opex”或“External Opex”然后是“Opex”ELSE“Other”。

[`Group] == "Cash Capex" ? "Capex" : ([Group] =="Internal Opex" ? "Opex" :([Group] =="External Opex" ? "Opex":"Other"))`
于 2019-09-17T15:32:48.967 回答