我遇到过以下场景,
我有一个列名称 Broker_name,其中的几个值是'tpt Broker'、'Mark iii'、'Davidtpt'
这些值的最终输出应该是'TPT Broker','Mark III','Davidtpt'
基本上我需要在字符串中大写一些预定义值说TPT带有尾随空格、罗马字母等..
所以我创建了一个查找表,其中有
Column1 Column2
tpt TPT
iii III
您能否告诉我如何检查字符串中是否存在特定字符,然后在表中进行查找。基于此?
最佳答案
最后我设法在 MODEL 子句的帮助下解决了这个问题:
SELECT id, broker_name FROM (
SELECT id, broker_name, rn, val, replacement
FROM brokers CROSS JOIN (SELECT rownum AS rn, val, replacement FROM lookup)
MODEL
PARTITION BY (id)
DIMENSION BY (rn)
MEASURES (val, replacement, broker_name)
RULES (
broker_name[ANY] = regexp_replace(nvl(broker_name[CV()-1], broker_name[CV()]),
'(^|.*\W)' || val[CV()] || '(\W.*|$)',
'\1' || replacement[CV()] || '\2')
)
)
WHERE rn = (SELECT count(*) FROM lookup)
ORDER BY id, broker_name;
基本上它执行以下操作:
- 对查找表中的项目进行编号
- 在代理和查找之间执行交叉连接
- 对于每个代理,它会迭代查找值并进行替换(有点奇怪的正则表达式确保仅替换整个单词)
- 最后,它仅获取每个代理的最后一行,其中包含所有替换后的值
这是SQL Fiddle .
关于sql - 搜索字符串中的特定字符 - Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290428/