Создание производных столбцов из столбца компонентов переменной длины

Я надеюсь получить ваше руководство по этому поводу. У меня есть столбец, состоящий из разделов переменной длины, которые нужно разделить на отдельные дополнительные столбцы. Столбец PCMRetrievalCode имеет тип nvarchar и имеет следующий формат:

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 я пытаюсь создать их как производные столбцы, но у меня возникли проблемы с выражением для разделения столбца PCMRetrievalCode на основе его компонентов переменной длины для SchemaID и ContainerID. Я пробовал использовать функцию FINDSTRING, поскольку нет CHARINDEX, и я пытаюсь использовать DT_WSTR, поскольку это тип данных, совместимый с SSIS, для типа данных nvarch SQL Server. Вот те выражения, которые я пробую в редакторе преобразований:

введите описание изображения здесь

Я думаю, что выражения для PackageCode и SchemaID будут в порядке, но у меня возникают трудности с выражением ContainerID. Любой совет будет очень признателен. Заранее спасибо!


person daniness    schedule 24.04.2018    source источник


Ответы (3)


Я сделал это с двумя отдельными объектами производных столбцов.

Первый (GetPO и остаток для облегчения анализа):

POorPA = LEFT(data,2)
leftover = SUBSTRING(data,3,9999)

Следующий производный столбец более сложен:

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 символа
  2. CON всегда присутствует для цели
  3. Идентификаторы числовые (можно безопасно искать "C" и "N").
person KeithL    schedule 24.04.2018
comment
К вашему сведению, я использовал [данные] в качестве имени поля - person KeithL; 24.04.2018

Я пока проигнорировал преобразования данных, чтобы упростить логику выражения. Если они вам нужны, вы сможете добавить их там, где это необходимо.


Поскольку у вас есть постоянное значение CON в ваших данных, вы можете использовать его в качестве привязки, как вы это сделали для SchemaId, и работать оттуда. Я думаю, что вам не хватает того, что вам не нужно указывать точное количество символов, оставшихся в строке, выражению SUBSTRING. Если вы просто хотите дойти до конца, вставьте 99999 и покончите с этим:

SUBSTRING(PCMRetrievalCode
         ,FINDSTRING(PCMRetrievalCode
                    ,"CON"
                    ,1
                    ) + 3
         ,99999
         )
person iamdave    schedule 24.04.2018

Спасибо за предложения, Всем!

Мне удалось заставить его работать, используя следующие выражения для производных столбцов:

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)))
person daniness    schedule 10.05.2018