在Oracle 8i Query中替换字符串

时间:2014-03-20 11:07:16

标签: sql oracle oracle8i

我在ORACLE 8i中有一张这样的桌子

Value  | Timestamp
KKQ    | 10:00
KVKK   | 11:00
KMPE   | 12:00
PPKKPE | 13:00

我需要为KV替换V,为KM替换M,为PE替换RPP N P L查询这些值时。

最好的方法是什么?我看到的问题是我们可以在Value列中包含任意字符串的组合...我们可以拥有的值包括:KK, Q, KV, V, KM, M, PE, R, PP, N, P, L

2 个答案:

答案 0 :(得分:2)

select 
  replace(
  replace(
  replace(
  replace(<input>, 
    'KV', 'V'),
    'KM', 'M'),
    'PE', 'R'),
    'PP', 'N')
from
  ....

答案 1 :(得分:0)

SQL无法解决这个问题,比如使用多个REPLACE函数。其原因是例如PPP可以表示PP-P或P-PP,因此可以被PN或NP取代。 xxxKVxxx也是如此;是这个KV还是一个尾随的K和一个领先的V?

您必须编写一个循环遍历字符串并逐个替换的数据库函数(PL / SQL)。你肯定会知道如何解释PPP: - )

(顺便说一句:将分类存储为串联的字母串而不是单独的表中似乎是一个坏主意。你使用关系数据库系统而不使用关系部分。因此现在出现了问题。)< / p>