sql – 搜索数字是否包含在表达式中:1-3,5,10-15,20
发布时间:2021-01-25 09:07:58 所属栏目:编程 来源:网络整理
导读:在oracle数据库表中,我必要找到给定批号的功效. 生涯批号的字段是包括相同’1-3,5,10-15,20’的字符串(此字符串中的数字已排序) 有没有步伐做到这一点? 在上面的示例中,应找到以下批号的功效: 1,2,3,10,11,12,13,14,15,20 在应用措施中无法执行此操纵,因此
在oracle数据库表中,我必要找到给定批号的功效.
有没有步伐做到这一点? 在上面的示例中,应找到以下批号的功效: 1,2,3,10,11,12,13,14,15,20 在应用措施中无法执行此操纵,因此必需在数据库中完成. 相同于:“SELECT * FROM products WHERE lot = 2” 办理要领可以行使 REGEXP_SUBSTR函数和 hierarchical queries在SQL中完成全部操纵:with list_of_ids as ( select regexp_substr(a,'[[:digit:]]+',1,1) as lot1,nvl( regexp_substr(a,'(-)([[:digit:]]+)','i','2'),regexp_substr(a,1)) as lot2 from (select regexp_substr('1-3,20','[^,]+',level) as a from dual connect by regexp_substr('1-3,level) is not null ) ) select a.* from products a join list_of_ids b on a.lot between b.lot1 and b.lot2 可是,我必需夸大正确地类型化数据库是要走的路.这种办理方案也许无法很好地扩展,而且可以完成大量不须要的事变. 它的事变道理如下: 起首在逗号上拆分数据: SQL> select regexp_substr('1-3,level) as a 2 from dual 3 connect by regexp_substr('1-3,level) is not null 4 ; A -------------- 1-3 5 10-15 20 接下来,将其拆分为连字符,以便在最终将其毗连到表之条件供BETWEEN中行使的最小和最大批次. NVL用于确保始终存在最大值. SQL> select regexp_substr(a,1) as lot1 2,'2') 3,1)) as lot2 4 from (select regexp_substr('1-3,level) as a 5 from dual 6 connect by regexp_substr('1-3,level) is not null 7 ) 8 ; LOT1 LOT2 -------------- -------------- 1 3 5 5 10 15 20 20 SQL> 这是一个有完备查询的SQL Fiddle事变. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |