我使用的是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);
2条答案
按热度按时间gfttwv5a1#
有各种各样的方法来标记你的字符串;它使用正则表达式:
这将使用xmltable将值视为一个序列并提取它们:
根据您的oracle版本,您可能可以使用json而不是xml执行类似的操作:
db<>小提琴
值得尝试各种方法,并将性能与数据进行比较。
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中自动转换为数字。