我需要创建一个函数,如果我出现4个重复数字或更多,则返回true。我使用的是Oracle 9i版本,因此我无法使用正则表达式。 e.g:
0000234567, 0111112345, 2333345678, 3333333333
答案 0 :(得分:3)
由于只有10个可能的数字,因此删除4个相等或更多数字序列的电话号码(根据您的评论)就像这样简单:
DELETE
FROM MyTable
WHERE
phonenumber LIKE '%0000%' OR
phonenumber LIKE '%1111%' OR
phonenumber LIKE '%2222%' OR
phonenumber LIKE '%3333%' OR
phonenumber LIKE '%4444%' OR
phonenumber LIKE '%5555%' OR
phonenumber LIKE '%6666%' OR
phonenumber LIKE '%7777%' OR
phonenumber LIKE '%8888%' OR
phonenumber LIKE '%9999%'
测试作为功能
CREATE OR REPLACE FUNCTION IsRepeatingDigit(s varchar2)
RETURN number IS
BEGIN
IF s LIKE '%0000%' OR
s LIKE '%1111%' OR
s LIKE '%2222%' OR
s LIKE '%3333%' OR
s LIKE '%4444%' OR
s LIKE '%5555%' OR
s LIKE '%6666%' OR
s LIKE '%7777%' OR
s LIKE '%8888%' OR
s LIKE '%9999%'
THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END;
我不会返回布尔值,因为布尔类型在Oracle中有所限制。您可以在PL / SQL中使用它,但不能在纯SQL中使用它。
答案 1 :(得分:0)
这将检查4个连续重复字符的字符串:
Oracle 11g R2架构设置:
CREATE TABLE table_name ( value ) AS
SELECT '0000234567' FROM DUAL UNION ALL
SELECT '0111112345' FROM DUAL UNION ALL
SELECT '2333456789' FROM DUAL UNION ALL
SELECT '0123456666' FROM DUAL UNION ALL
SELECT '0123456789' FROM DUAL
/
CREATE FUNCTION check_For_Repeats(
i_value VARCHAR2,
i_repeats INTEGER DEFAULT 4
) RETURN NUMBER
IS
p PLS_INTEGER := 1;
c CHAR(1) := SUBSTR( i_value, p, 1 );
BEGIN
IF i_repeats < 2 THEN
RETURN NULL;
END IF;
FOR i IN 2 .. LENGTH( i_value ) LOOP
IF SUBSTR( i_value, i, 1 ) = c THEN
IF i >= p + i_repeats - 1 THEN
RETURN 0;
END IF;
ELSE
p := i;
c := SUBSTR( i_value, p, 1 );
END IF;
END LOOP;
RETURN 1;
END;
/
查询1 :
SELECT value, check_For_Repeats( value ) FROM table_name
<强> Results 强>:
| VALUE | CHECK_FOR_REPEATS(VALUE) |
|------------|--------------------------|
| 0000234567 | 0 |
| 0111112345 | 0 |
| 2333456789 | 1 |
| 0123456666 | 0 |
| 0123456789 | 1 |