Teradata SQL подстрока длинное выражение и генерировать новые столбцы - PullRequest
0 голосов
/ 29 июня 2018

Я получил длинное выражение для каждой строки, длина выражения варьируется, «идентификатор элемента» отличается и не в том же порядке. Я знаю, как сделать подстроку, но я не знаю, как получить желаемый результат. Не могли бы вы помочь? Заранее спасибо.

Таблица:

Строка 1:

<?xml version = '1.0'?>
<Data>
     <Item id="DDD">
         <!±DATA±444»»>
     </Item>
     <Item id="BBB">
         <!±DATA±222»»>
     </Item>
     <Item id="CCC">
         <!±DATA±333»»>
     </Item>
     ...
</Data>

Строка 2:

<?xml version = '1.0'?><Data><Item id="BBB"><!±DATA±022»»></Item><Item id="CCC"><!±DATA±033»»></Item><Item id="DDD"><!±DATA±044»»></Item>…<Item id="AAA"><!±DATA±011»»></Item>….</Item></Data>

Строка 3:

<?xml version = '1.0'?><Data><Item id="AAA"><!±DATA±001»»></Item><Item id="EEE"><!±DATA±005»»></Item><Item id="DDD"><!±DATA±044»»></Item>…<Item id="CCC"><!±DATA±003»»></Item>….</Item></Data>

Желаемый результат:

  ID       AAA     BBB    CCC   DDD   EEE  ...    
   1               222    333   444           ...
   2       011     022    033   044        ...
   3       001            003   044   005  ...
  ...      ...     ...    ...   ...   ...  ...

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете применить RegEx для каждого столбца:

RegExp_Substr(x,'<Item id="AAA">\s*<!±DATA±\K.+?(?=»»>)', 1,1,'i') AS AAA,
RegExp_Substr(x,'<Item id="BBB">\s*<!±DATA±\K.+?(?=»»>)', 1,1,'i') AS BBB,
...

Он ищет точное совпадение <Item id="AAA">, за которым следуют любые пробелы, затем *<!±DATA±, а затем извлекает следующие символы до »»>.

...