我正在使用具有该类型行的表在 Oracle SQL 中开发命令:
company=1&product=12588&version=1
对于我的命令,我需要每行的产品编号和版本,但按列分隔。
我的第一个问题:如何使用不同的 REGEXP_SUBSTR 仅读取产品编号
我的第二个问题:创建新列以显示版本而不重复行的最佳方法是什么?
我希望有一个人可以帮助我。
如果数据真的那么简单,那么正则表达式会使代码变得相当简单。比SUBSTR + INSTR选项简单得多。你为什么不想使用正则表达式?因为它是邪恶的,还是……?
product:从列中获取第二个数值version:从列中取出最后一个数值SQL> with test (col) as
2 (select 'company=1&product=12588&version=1' from dual union all
3 select 'company=2&product=52361&version=4' from dual
4 )
5 select col,
6 regexp_substr(col, '\d+', 1, 2) as product,
7 regexp_substr(col, '\d+$') as version
8 from test;
COL PRODUCT VERSION
--------------------------------- ---------- ----------
company=1&product=12588&version=1 12588 1
company=2&product=52361&version=4 52361 4
SQL>
作为
创建新列以显示版本而不重复行的最佳方法是什么?
我不知道那是什么意思。“不重复行”?哪条线?哪个副本?
要回答您的第一个问题,您可以通过仅组合 ** substr ** 和 ** instr ** 函数来使用下面的 sql。该解决方案利用了instr函数的第四个也是最后一个参数。
select your_column
, substr(your_column
, instr(your_column, '=', 1, 1) + 1
, instr(your_column, '&', 1, 1) - instr(your_column, '=', 1, 1) - 1
) company
, substr(your_column
, instr(your_column, '=', 1, 2) + 1
, instr(your_column, '&', 1, 2) - instr(your_column, '=', 1, 2) - 1
) product
, substr(your_column
, instr(your_column, '=', 1, 3) + 1
) version
from (
select 'company=1&product=12588&version=1' your_column from dual union all
select 'company=2&product=52361&version=4' your_column from dual
) Your_data
;
但是,我不确定我是否正确理解了您的第二个问题。