SSIS派生前导零的列填充

时间:2014-03-10 14:52:22

标签: if-statement ssis expression padding ternary-operator

我希望能够在以下场景中添加前导零 -

  1. 如果[帐户ID]< [帐户ID],我需要在[帐户ID]之前的前导零。 17 {申请= RCC,SEC,HOGAN CIS}

  2. 我需要在[帐户ID]之前的前导零如果([帐户ID] + [帐号])< 17 {申请= CLN}

  3. 如果([客户端密钥] + [客户端ID])< [客户端密钥],则需要在[客户端密钥]之前的前导零。 17 {申请= ITF}

  4. 我在派生列中定义了以下表达式 -

     LTRIM(RTRIM(APPLICATION == "RCC" || APPLICATION == "SEC" ? APPLICATION + "|" + [ACCOUNT ID] : APPLICATION == "HOGAN CIS" ? (HOGAN_Hogan_Alpha_Product_Code == "DDA" ? "DDA" : "TDA") + "|" + [ACCOUNT ID] : APPLICATION == "ITF" ? APPLICATION + "|" + [CLIENT KEY] + [CLIENT ID] : APPLICATION == "CLN" ? APPLICATION + "|" + [ACCOUNT ID] + [ACCOUNT NUMBER] : APPLICATION + "|" + [ACCOUNT NUMBER]))
    

1 个答案:

答案 0 :(得分:5)

填充字符串

我在处理添加前导字符时使用的一般策略是始终添加它们然后取N个最右边的字符。我发现它大大简化了你的逻辑。

RIGHT(REPLICATE('0', 17) + [MyColumn], 17)

这将生成17个零,将其添加到我的列,然后切掉最后17个字符。如果MyColumn已经是17个字符,那么就没有有效的工作了。如果它是空的,那么现在你的值为17。

选择

在您的情况下,我首先尝试添加派生列,以确定此APPLICATION属于哪个逻辑块。就像你现有的三元表达一样。

(APPLICATION == "CLN") ? 10 : 
    (APPLICATION == "ITF") ? 20 :
    (APPLICATION == "RCC" | APPLICATION == "SEC" ....) ? 30 : 40

退出该派生列,您将能够验证逻辑是否按预期工作,这使填充更容易。