Teradata sql 对长表达式进行子字符串化并生成新列
Teradata sql substring a long expression and generate new columns
我得到了每一行的长表达式,表达式的长度是不同的,'item id'是不同的,而且顺序也不一样。我知道一种做子串的方法,但我不知道如何得到我想要的结果。能否请你帮忙?提前致谢。
Table:
第 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 ...
... ... ... ... ... ... ...
您可以为每一列应用 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">
的完全匹配项,然后是任何 space 个字符,然后是 *<!±DATA±
,然后提取以下字符直至 »»>
。
我得到了每一行的长表达式,表达式的长度是不同的,'item id'是不同的,而且顺序也不一样。我知道一种做子串的方法,但我不知道如何得到我想要的结果。能否请你帮忙?提前致谢。
Table:
第 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 ...
... ... ... ... ... ... ...
您可以为每一列应用 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">
的完全匹配项,然后是任何 space 个字符,然后是 *<!±DATA±
,然后提取以下字符直至 »»>
。