作业帮 > 综合 > 作业

用oracle正则表达式

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/20 16:50:52
用oracle正则表达式
1.号码尾数后4位含3个以上(含3个)相同号码----如AAAA、BAAA、AAAA,注A不等于B
2.号码尾数后4位按顺序连续递增或递减----如ABCD、DCBA,注A、B、C、D均不相等
3.号码尾数后4位排序有规律且规律重复----如ABAB、AABB、BAAB,注A不等于B
4.号码尾数后8位,其中有6位以上数字排序有规律且规律重复次数超过2次以上(含2次)的号码----AAABBB**、**AABAAB、**ABBABB、**ABCABC、*AABAAB*、*ABBABB*、*ABCABC*、AABAAB**、ABBABB**、ABCABC**,注A、B、C不相等
用oracle正则表达式
递增的用正则表达式处理很麻烦. 我就只列几个简单的吧.
CREATE TABLE test_phone (
phone_number  varchar(20)
);

INSERT INTO test_phone
SELECT '13812345678' FROM  dual  UNION ALL
SELECT '13812345566' FROM  dual  UNION ALL
SELECT '13812345656' FROM  dual  UNION ALL
SELECT '13812345556' FROM  dual  UNION ALL
SELECT '13812346666' FROM  dual  UNION ALL
SELECT '13855661234' FROM  dual  UNION ALL
SELECT '13856561234' FROM  dual  UNION ALL
SELECT '13855561234' FROM  dual  UNION ALL
SELECT '13866661234' FROM  dual;

--  AAAA 结尾的
SELECT
  *
FROM
  test_phone
WHERE
  REGEXP_LIKE(REVERSE(phone_number), '^(\d)\1\1\1');

PHONE_NUMBER
----------------------------------------
13812346666

--  AABB 结尾的
SELECT
  *
FROM
  test_phone
WHERE
  REGEXP_LIKE(REVERSE(phone_number), '^(\d)\1([^\1])\2')
  AND NOT REGEXP_LIKE(REVERSE(phone_number), '^(\d)\1\1\1');

PHONE_NUMBER
----------------------------------------
13812345656

--  ABAB 结尾的
SELECT
  *
FROM
  test_phone
WHERE
  REGEXP_LIKE(REVERSE(phone_number), '^(\d)(\d)\1\2')
  AND NOT REGEXP_LIKE(REVERSE(phone_number), '^(\d)\1\1\1');

PHONE_NUMBER
----------------------------------------
13812345656
再问: 递增递减的很简单 我知道 递减 REGEXP_LIKE(phone_number,'(9876|8765|7654|6543|5432|4321|3210)$')递增反过来就行了 我想知道BAAB这个怎么处理 和第四个里面的 其它都知道了
再答: 我又回去造了点测试数据
ABBA  方式的-- ABBA 结尾的.
SELECT
  *
FROM
  test_phone
WHERE
  REGEXP_LIKE(REVERSE(phone_number), '^(\d)([^\1])\2\1')
  AND NOT REGEXP_LIKE(REVERSE(phone_number), '^(\d)\1\1\1');

PHONE_NUMBER
----------------------------------------
13866668998
13866667997