大佬教程收集整理的这篇文章主要介绍了sql – 搜索数字是否包含在表达式中:1-3,5,10-15,20,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法做到这一点?
在上面的示例中,应找到以下批号的结果:
1,2,3,10,11,12,13,14,15,20
在应用程序中无法执行此操作,因此必须在数据库中完成.
类似于:“SELECT * FROM products WHERE lot = 2”
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工作.
以上是大佬教程为你收集整理的sql – 搜索数字是否包含在表达式中:1-3,5,10-15,20全部内容,希望文章能够帮你解决sql – 搜索数字是否包含在表达式中:1-3,5,10-15,20所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。