Oracle11g 如何从存储在| |中的oracle获取价值?
我是oracle新手,我想从存储为“Ashu | | 123 | | |主菜单| ENG | | 1 |”的列中获取值。Oracle11g 如何从存储在| |中的oracle获取价值?,oracle11g,Oracle11g,我是oracle新手,我想从存储为“Ashu | | 123 | | |主菜单| ENG | | 1 |”的列中获取值。 正如您所看到的,每个值都由| |符号分隔。在上面的值中,Ashu是客户名称,123是id,我希望这两个值都作为客户名称和客户id。在下面的查询中,我包含一些“动态”测试数据(不是解决方案的一部分;在主查询中使用实际的表名而不是test_data,使用实际的列名而不是str)。为了确保查询在所有情况下都能正确工作,我包括了几个特殊情况进行测试。我假设第一个值(在第一个|之前)是
正如您所看到的,每个值都由| |符号分隔。在上面的值中,Ashu是客户名称,123是id,我希望这两个值都作为客户名称和客户id。在下面的查询中,我包含一些“动态”测试数据(不是解决方案的一部分;在主查询中使用实际的表名而不是
test_data
,使用实际的列名而不是str
)。为了确保查询在所有情况下都能正确工作,我包括了几个特殊情况进行测试。我假设第一个值(在第一个|
之前)是客户名称,第二个是客户id,其余的输入字符串可以忽略。我特别查看了查询是否正确处理null
值(假设它们可能发生在数据中)
我将客户id保留为字符串;如果它必须是一个数字,那么最好将其全部封装在to_number()
中
谢谢你的回复,但看起来有点困难。我通过选择NVL(SUBSTR(uui,0,INSTR(uui,,| |')-1),uui)作为客户名称,REGEXP|u SUBSTR(uui,[^ | |]+',1,2)作为解决方案CustomerID@ashishjayara-如果您确定客户名称和客户id不能为
null
(不是现在,不是将来,两年后查询仍将使用),然后解决方案可以简化。是这样吗?解决方案“看起来有点困难”,因为它必须处理这种可能性。此外,如果您询问您不理解的部分,您可能会受益。是的,我现在知道了,谢谢:-)我对你的测试数据感到困惑,但我现在明白了,再次感谢
with
test_data ( str ) as (
select 'Ashu||123||Main Menu|ENG||1|1' from dual union all
select 'Misha||125' from dual union all
select 'Babu||||Main Menu|NZL||?' from dual union all
select 'Rim||' from dual union all
select 'Todd' from dual union all
select '||139||Other Stuff' from dual
)
-- end of test data (only for testing and illustration) - not part of solution
-- SQL query begins BELOW THIS LINE
select str,
regexp_substr(str, '([^|]*)(\|\||$)', 1, 1, null, 1) as cust_name,
regexp_substr(str, '([^|]*)(\|\||$)', 1, 2, null, 1) as cust_id
from test_data
;
STR CUST_NAME CUST_ID
----------------------------- --------- -------
Ashu||123||Main Menu|ENG||1|1 Ashu 123
Misha||125 Misha 125
Babu||||Main Menu|NZL||? Babu
Rim|| Rim
Todd Todd
||139||Other Stuff 139
6 rows selected.