大佬教程收集整理的这篇文章主要介绍了搜索表达式中是否包含数字:1-3,5,10-15,20,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
通过使用REGEXP_SUBSTR函数和分层查询,可以在sql中完成所有这些操作:
with List_of_IDs as (
SELEct regexp_substr(a, '[[:digit:]]+',1, 1) as lot1
, nvl( regexp_substr(a, '(-)([[:digit:]]+)',1, 1, 'i', '2')
, regexp_substr(a, '[[:digit:]]+',1, 1)) as lot2
from (SELEct regexp_substr('1-3,5,10-15,20' , '[^,]+', 1, level) as a
from dual
connect by regexp_substr('1-3,5,10-15,20' , '[^,]+', 1, 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,5,10-15,20', '[^,]+', 1, level) as a
2 from dual
3 connect by regexp_substr('1-3,5,10-15,20', '[^,]+', 1, level) is not null
4 ;
A
--------------
1-3
5
10-15
20
接下来,在最终将其连接到表之前,在连字符上拆分它以提供在betweeN中使用的最小和最大手数。NVL可以确保始终保持最大值。
sql> SELEct regexp_substr(a, '[[:digit:]]+',1, 1) as lot1
2 , nvl( regexp_substr(a, '(-)([[:digit:]]+)',1, 1, 'i', '2')
3 , regexp_substr(a, '[[:digit:]]+',1, 1)) as lot2
4 from (SELEct regexp_substr('1-3,5,10-15,20' , '[^,]+', 1, level) as a
5 from dual
6 connect by regexp_substr('1-3,5,10-15,20' , '[^,]+', 1, level) is not null
7 )
8 ;
LOT1 LOT2
-------------- --------------
1 3
5 5
10 15
20 20
sql>
这是带有完整查询的有效SQL Fiddle。
以上是大佬教程为你收集整理的搜索表达式中是否包含数字:1-3,5,10-15,20全部内容,希望文章能够帮你解决搜索表达式中是否包含数字:1-3,5,10-15,20所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。