使用regexp_like函数判断传入字符串是否符合格式如:1111,22221,.....,33332
1. 逗号为各子串分割符
2. 各子串仅为数字组成,最长不超过20位
3. 字符串不能包含数字及逗号以外的字符
4. 无限定字符串包含多少个子串
------解决方案--------------------
为了你这个问题,我还真是想了很久,首先分享一个观点吧:
oracle对正则支持很浅,建议不使用在oracle中使用正则表达式,因为容易造成low performance。由于你的条件比较多,我的sql也比较复杂,肯定我的有值得优化的地方,嘿嘿,新手路过。
WITH TS AS
(SELECT '1111,222,3312' A FROM DUAL UNION ALL
SELECT '1,2,3,4,5,6' FROM DUAL UNION ALL
SELECT '66,77' FROM DUAL UNION ALL
SELECT '65,98,53' FROM DUAL UNION ALL
SELECT '65,98,53' FROM DUAL UNION ALL
SELECT '65,98,53' FROM DUAL UNION ALL
SELECT '65,98,53' FROM DUAL UNION ALL
SELECT '65,98,53' FROM DUAL UNION ALL
SELECT '65,98,53' FROM DUAL UNION ALL
SELECT '65,98,53' FROM DUAL UNION ALL
SELECT '65,98,53' FROM DUAL )
SELECT DISTINCT a,regexp_substr(a,'[[:alnum:]]+',1,level) t,LEVEL e
from ts
connect by level<=length(regexp_replace(a,'[[:alnum:]]+'))+1
------解决方案--------------------
直接用实现不了,因为你每一段还有判断规则。。先按1楼的方法分割以后,再判断分割的时候存在不满足或者超过20的。。取count值即可,如果count为0即满足否者不满足。