首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从可变长度组件的列创建派生列

从可变长度组件的列创建派生列
EN

Stack Overflow用户
提问于 2018-04-24 14:49:51
回答 3查看 259关注 0票数 0

我希望在这方面得到你的指导。我有一个列,由可变长度的部分组成,需要分割成单独的附加列。列PCMRetrievalCode是nvarchar类型,由以下格式组成:

代码语言:javascript
复制
i.e. PO607CON1324

PO = Non-Package or PA = Package
607 = SchemaId --> could be more than 3 numbers, as the schema increases
CON = Container
1324 = ContainerId --> could be 3-5 numbers

因此,在我的SSIS包中,我试图将它们创建为派生列,但由于SchemaID和ContainerID的可变长度组件,表达式拆分SchemaID列遇到了困难。我尝试使用FINDSTRING函数,因为这里没有CHARINDEX,所以我尝试使用DT_WSTR,因为这是Server数据类型的SSIS兼容数据类型。以下是我在Transformation中尝试的表达式:

我认为PackageCode和SchemaID的表达式有希望是可以的,但我遇到困难的地方是ContainerID表达式。如有任何建议,将不胜感激。提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-10 20:03:06

谢谢大家的建议!

通过对派生列使用以下表达式,我能够使其工作:

代码语言:javascript
复制
PackageCode: SUBSTRING(((DT_WSTR,15)PCMRetrievalCode),1,2)

SchemaID:  SUBSTRING((DT_WSTR,15)PCMRetrievalCode,3,FINDSTRING(((DT_WSTR,15)  
           PCMRetrievalCode),"C",1) - 3)  

ContainerID:  RIGHT(((DT_WSTR,15)PCMRetrievalCode),(LEN((DT_WSTR,15)
              PCMRetrievalCode) - FINDSTRING((DT_WSTR,15)
              PCMRetrievalCode,"N",1)))
票数 0
EN

Stack Overflow用户

发布于 2018-04-24 16:41:29

我是用两个独立的派生列对象完成的。

第一个(GetPO和剩余物,以便于解析):

代码语言:javascript
复制
POorPA = LEFT(data,2)
leftover = SUBSTRING(data,3,9999)

下一个派生列更复杂:

代码语言:javascript
复制
ScemaID = LEFT(leftover,FINDSTRING(leftover,"C",1) - 1)
CON = SUBSTRING(leftover,FINDSTRING(leftover,"C",1),3)
ContainerID = RIGHT(leftover,FINDSTRING(REVERSE(leftover),"N",1) - 1)

基本原理和假定概念:

  1. PO或PA总是两个字符。
  2. CON总是出现在目标上
  3. is是数字的(搜索"C“和”N“是安全的)
票数 2
EN

Stack Overflow用户

发布于 2018-04-24 16:20:53

为了简化表达式逻辑,我暂时忽略了数据转换。如果您需要它们,您应该能够在必要时添加它们。

由于您的数据中有一个一致的CON值,所以您可以使用它作为锚,就像您为SchemaId所做的那样并在那里工作。我认为您缺少的部分是,您不必向SUBSTRING表达式提供字符串中的确切字符数。如果你只想走到最后,把99999插进去,然后完成它:

代码语言:javascript
复制
SUBSTRING(PCMRetrievalCode
         ,FINDSTRING(PCMRetrievalCode
                    ,"CON"
                    ,1
                    ) + 3
         ,99999
         )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50004663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档