我有一个INPUT VARIABLE字符串'AB1234567'它不应该超过9位数。我在oracle中需要一个函数使用正则表达式我需要检查字符串的格式。
即字符串的前两个字符应为alphabetes,接下来的7个字符应为数字。
如果我在字符串的前两个字符中得到任何其他特殊字符,则函数需要返回'F',接下来的7个字符应该是数字,如果我在接下来的7个变量中得到任何垃圾字符那么它需要返回'f ”。
字符串的通用格式是'AB1234567',前两个字符是alpha,接下来的7应该是数字。
谢谢
答案 0 :(得分:0)
如果我正确理解,你需要这样的东西:
(upss,我错过了not be more than 9 digits
部分,更新了)
create function func(var nvarchar2)
return nvarchar2
as
begin
if NOT REGEXP_LIKE(var, '^[A-Z]{2}') then
return 'F';
elsif NOT REGEXP_LIKE(var, '^..[0-9]{7}$') then
return 'f';
else
return 'ok';
end if;
end;
答案 1 :(得分:0)
您可以使用不同字符类的regexp_like来检查不同的模式。
create or replace function str_test(txt in varchar2) return varchar2 as
begin
if not regexp_like(txt, '^[[:alpha:]]{2}') then
return 'F';
elsif not regexp_like(txt, '^.{2}\d{7}$') then
return 'f';
else
return 'some other output';
end if;
end;
/
答案 2 :(得分:0)
CREATE OR REPLACE FUNCTION str_test (
str IN VARCHAR2
) RETURN CHAR
AS
BEGIN
IF str IS NULL THEN
RETURN 'X';
ELSE IF LENGTH( str ) != 9 THEN
RETURN 'Y'
ELSE IF SUBSTR( str, 1, 1 ) NOT BETWEEN 'A' AND 'Z'
OR SUBSTR( str, 2, 1 ) NOT BETWEEN 'A' AND 'Z' THEN
RETURN 'F';
ELSE
TO_NUMBER( SUBSTR( str, 3 ) );
RETURN NULL;
END IF;
EXCEPTION
WHEN other THEN
RETURN 'f';
END;
/