0

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

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

在查询这些值时,我需要替换KVfor VKMfor MPEfor RPPforNPfor 。L

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

4

2 回答 2

2
select 
  replace(
  replace(
  replace(
  replace(<input>, 
    'KV', 'V'),
    'KM', 'M'),
    'PE', 'R'),
    'PP', 'N')
from
  ....
于 2014-03-20T11:14:53.933 回答
0

这不能通过 SQL 解决,比如使用几个 REPLACE 函数。这样做的原因是,例如 PPP 可以表示 PP-P 或 P-PP,因此可以用 PN 或 NP 代替。xxxKVxxx 相同;这是 KV 还是尾随 K 和前导 V?

您将不得不编写一个数据库函数 (PL/SQL) 来循环遍历字符串并逐部分替换。您一定会知道如何解释 PPP :-)

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

于 2014-03-20T11:46:06.100 回答