Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列 前台传来的字符串:'589,321' SELECT*FROM TAB_A T1 WHERE T1.CODE IN ( SELECT REGEXP_SUBSTR('589,321','[^,]+', 1, LEVEL) FROM DUAL CONNECT BY REGEXP_SUBSTR('SMITH,ALLEN,WARD,JONES', '[^,]+', 1, LEVEL) IS NOT NULL )
with t as ( select '111,222,333' col from dual union all select '444,555,666' col from dual ) , level) AS SUBJECT_IDS from t connect by level <= regexp_count(col, '[^,]+') and col = prior col
Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为“1,2,3,5”,字段B为“2”.想获取两个字段的交集(相同值)2,获取两个字段的差集(差异值)1,3,5. 一.最终实现的sql语句 1.获取交集(相同值): , rownum) id from (select '1,2,3,5' id from dual) connect intersect -- 取交集 , rownum) id ' id from dual) connect ; /*结果: 2 */ 2.获取差集(差异值
--创建表类型 create or replace type mytype as table of number;--如果定义成varchar--CREATE OR REPLACE type mytype as table of varchar2(4000); -- 将字符串分割成数组 function my_split(piv_str in varchar2, piv_delimiter in varchar2) --piv_str 为字符串,piv_delimiter 为分隔符 return
由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式,即同一个列中存储了多个属性值.这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果:这里使用substring_index函数进行处理 建表语句: DROP table if EXISTS tbl_name; CREATE TABLE tbl_name( id ) not null auto_increment, userName ) not null, PRIMARY KEY(id) ) ENGINE D
Oracle 超长字符串分割劈分,具体能有多长没测过,反正很大.... 下面,,,,直奔主题了: CREATE OR REPLACE FUNCTION splitstr(p_string IN clob, p_delimiter IN VARCHAR2:=',') RETURN str_split PIPELINED /*劈分字符串,返回结果集 使用 select COLUMN_VALUE from table(splitstr('34324,65,gfds,yt,,')); --默认分隔符 使
由于工作需要需要处理一些以逗号分隔的字符串,每次都要现做很是麻烦,网上找了很多都没有现成的,好吧,自己动手写一个好了 )) ) BEGIN /*函数功能: 把带逗号的字符串分割取出 参数: num 要取出的字符串的索引值, 以0开始 str 以逗号分割的字符串 扩展: 将逗号替换成其他符合,即可完成不同分隔符拆分字符串,亦可以把分隔符作为参数 */ SUBSTRING( SUBSTRING_INDEX(), CASE num THEN CHAR_LENGTH( SUBSTRING_INDEX(s