sql - 搜索字符串中的特定字符 - Oracle

标签 sql oracle

我遇到过以下场景,

我有一个列名称 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;

基本上它执行以下操作:

  1. 对查找表中的项目进行编号
  2. 在代理和查找之间执行交叉连接
  3. 对于每个代理,它会迭代查找值并进行替换(有点奇怪的正则表达式确保仅替换整个单词)
  4. 最后,它仅获取每个代理的最后一行,其中包含所有替换后的值

这是SQL Fiddle .

关于sql - 搜索字符串中的特定字符 - Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21290428/

相关文章:

oracle - 用于 ORACLE db 的 Ubuntu Shell 脚本

sql - Oracle审计删除: how to audit what was deleted?

oracle - 在 Oracle 中编译用户定义函数时出现错误 PLS-00103

java - ArrayList 迭代相同的数据

sql - 选择单列时差小于 2 小时的行

mysql - 试图获得申请了年龄范围工作的男性/女性的百分比

c# - 如果记录在表中则插入或更新

SQL NULL 条件

sql - 数据库记录 - 有效开始日期和结束日期以及外键

mysql - 将 SQL 文件转换为 CSV