失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Oracle 逗号分割的字符串转换为可放入in的语句

Oracle 逗号分割的字符串转换为可放入in的语句

时间:2024-05-07 12:22:10

相关推荐

Oracle 逗号分割的字符串转换为可放入in的语句

一、简介

最近在工作中,同事遇到一个问题,就是前台搜索条件传递过来 “级3年制,级4年制,...”这种用逗号分隔的字符串,然后后台他想使用not in来过滤数据。于是,我们一起研究了一下,以下是同事最开始写的sql:

select *from (select f.*, f.nj || '级' || m.major_year || '年制' njyearfrom v_zhxg_jf_sfxx_ys_ss_tz_jm_tf fleft join wp_kdb_major mon f.zydm = m.major_key) twhere t.njyear not in(select regexp_replace('.级5年制.,.级4年制.', '[.]', '''')from dual)

根本没有效果,这就奇怪了。然后我们讨论了一下,其实使用in操作符的话,后面其实是接的多行结果那种格式的,观察下面两种情况。

【a】

select regexp_replace('.级5年制.,.级4年制.', '[.]', '''') from dual

【b】

select regexp_substr('级3年制,级4年制', '[^,]+', 1, level)from dualconnect by regexp_substr('级3年制,级4年制', '[^,]+', 1, level) is not null

对比以上两个sql,应该可以看出区别了吧。

二、 解决方法

select *from (select f.*, f.nj || '级' || m.major_year || '年制' njyearfrom v_zhxg_jf_sfxx_ys_ss_tz_jm_tf fleft join wp_kdb_major mon f.zydm = m.major_key) twhere to_char(t.njyear) not in(select regexp_substr('级3年制,级4年制', '[^,]+', 1, level)from dualconnect by regexp_substr('级3年制,级4年制','[^,]+',1,level) is not null)

问题解决,在此做个总结,以防后面踩坑。

如果觉得《Oracle 逗号分割的字符串转换为可放入in的语句》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。