将clob列数据转换为数字字段

1wnzp6jl  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(509)

我使用的是oraclesql开发工具。我有一个表clob\u tab having column,其数据类型为:col1 clob data in this column is('27,88100,25,26')
我想将此列中的值用作另一个查询的子查询:selectfrom where col2 not in(select col1 from clob\u tab);col2的数据类型是number。我希望输出为:selectfrom where col2 not in(27,88100,25,26);
有可能吗?
我尝试了多种不起作用的方法,例如:convert blob to varchar2:dbms \u lob.substr(my \u field \u blob \u type)convert varchar2 to number using regex \u replace:select cast(regexp \u replace(col1,[^0-9]+','')as number)from clob \u tab。使用regex\u repalce所有的逗号都消失了,我得到了27881002526。我不要这个号码。我要数字之间用逗号隔开。
他们都没有把我的问题转换成这样的形式:
从中选择*其中col2不在(27,88100,25,26);

gfttwv5a

gfttwv5a1#

有各种各样的方法来标记你的字符串;它使用正则表达式:

with cte (n) as (
  select to_number(regexp_substr(col1, '(.*?)(,|$)', 1, level, null, 1))
  from clob_tab
  connect by level < regexp_count(col1, '(.*?)(,|$)')
)
select *
from abc
where col2 not in (
  select n from cte
);

这将使用xmltable将值视为一个序列并提取它们:

select *
from abc
where col2 not in (
  select to_number(x.column_value)
  from clob_tab
  cross join xmltable (col1) x
);

根据您的oracle版本,您可能可以使用json而不是xml执行类似的操作:

select *
from abc
where col2 not in (
  select x.n
  from clob_tab
  cross join json_table (json_array(col1 format json), '$[*]' columns n number path '$') x
);

db<>小提琴
值得尝试各种方法,并将性能与数据进行比较。

cbwuti44

cbwuti442#

我找到了解决这个问题的简单方法:)
从prachi\u exp\u cycle connect中选择regexp\u substr(object\u name,'[^,]+',1,level)by regexp\u substr(object\u name,'[^,]+',1,level)不为空;
它将以逗号分隔的字符值25、26、27返回输出。在中用作子查询时,这些输出将在sql developer中自动转换为数字。

相关问题