SSIS派生列(如果那么......其他)

Una*_*nal 6 ssis

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

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

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

bil*_*nkc 11

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

(LEN([column1]) > 8) ? column1 : replicate("0", (18 - LEN([column1]))) + [column1]
Run Code Online (Sandbox Code Playgroud)

该表达式应该有效,但它不起作用,因为REPLICATE调用将提供元数据,说明它是4k nvarchar字符(限制).如果你让它以这种方式工作是不对的,请评论并且我将破解表达式以在连接之前调整复制的输出column1

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

RIGHT(REPLICATE("0",8) + column1,8)
Run Code Online (Sandbox Code Playgroud)

您可能需要18秒,因为您的示例似乎使用18但概念将是相同的.