【发布时间】:2017-07-26 03:38:07
【问题描述】:
我有
select col1,
( REGEXP_SUBSTR ( col2, ' ( ?<=~ ) .*? ( ?=ABCD ) ' )
|| SUBSTRING ( col2 FROM POSITION ( 'ABCD' IN col2 )
FOR POSITION ( '~' IN SUBSTRING ( col2 FROM POSITION ( 'ABCD' IN col2 ) ) ) -1 ) as xyz)
from db.table
where col2 like '%ABCD%';
我有一个字段,其值如下所述。
Name1#Value1 ~ Name2#Value2 ~ ......... ~ NameX#ValueX ~ ......... ~ 名称N#值N
名称和值部分的数量没有限制。一个这样的名称将具有“ABCD”模式。我想提取包含“ABCD”模式的名称和值部分并将其放在单独的字段中。
我上面的代码抛出
“子串越界”
错误。
非常感谢您的帮助。谢谢。
【问题讨论】:
-
你能显示一些实际数据吗,看起来像名称-值-对?你也许可以切换到
nvp,比如Nvp(col2, 'ABCD','\ ~\ ', '#') -
fshjk#3~dhaj#NON-LOCAL~dhahdate#64030~kjqiwDATE2#64030`75:~kwokdNUM#000000010652~ncdj#158672694~pwkd#410~djakj#147~xkiww#322285781~lowq #1025133646~jdoi#~pwdljae#25133648~pqeidjdt#04212016
标签: pattern-matching teradata regexp-substr