我有一个字符串值,我需要检查plsql中的值的格式

时间:2017-04-29 07:40:55

标签: sql oracle plsql

我有一个INPUT VARIABLE字符串'AB1234567'它不应该超过9位数。我在oracle中需要一个函数使用正则表达式我需要检查字符串的格式。

即字符串的前两个字符应为alphabetes,接下来的7个字符应为数字。

如果我在字符串的前两个字符中得到任何其他特殊字符,则函数需要返回'F',接下来的7个字符应该是数字,如果我在接下来的7个变量中得到任何垃圾字符那么它需要返回'f ”。

字符串的通用格式是'AB1234567',前两个字符是alpha,接下来的7应该是数字。

谢谢

3 个答案:

答案 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;
/