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

我有一个字符串值,我需要检查plsql中值的格式,sql,oracle,plsql,Sql,Oracle,Plsql,我有一个输入变量作为字符串“AB1234567”,它不应该超过9位。我需要在oracle中使用正则表达式的函数我需要检查字符串的格式 i、 e字符串的前两个字符应为字母,接下来的7个字符应为数字 如果我在字符串的前两个字符中得到任何其他特殊字符,函数需要返回“F”,接下来的7个字符应该是数字如果我在接下来的7个变量中得到任何垃圾字符,那么它需要返回“F” 字符串的通用格式为“AB1234567”,前两个字符为字母,后7个字符为数字 谢谢你如果我理解正确,你需要这样的东西: (upss,我遗漏的不

我有一个输入变量作为字符串“AB1234567”,它不应该超过9位。我需要在oracle中使用正则表达式的函数我需要检查字符串的格式

i、 e字符串的前两个字符应为字母,接下来的7个字符应为数字

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

字符串的通用格式为“AB1234567”,前两个字符为字母,后7个字符为数字


谢谢你

如果我理解正确,你需要这样的东西:

(upss,我遗漏的
不超过9位
部分,已更新)


可以将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;
/

我没有Oracle plsql方面的经验,但是一个有效的正则表达式应该类似于
^[a-zA-Z]{2}\d{0,7}$
a-zA-Z
部分允许大写和小写。如果需要大写,则将其更改为
A-Z
0,7
表示0到7个实例之间。如果您至少需要1个左右,请将其更改为
1,7
。非常感谢您的回答,但oracle regexp语法与我的猜测不同。您已经尝试过了吗?啊,是的,先生,我尝试过一些东西,但效果不理想,所以考虑将其发布在我们的论坛中。@SanthoshPogaku根据正则表达式应该很好。谢谢男:)你明白我的意思了,我想我明白我的答案了,我重新设计了代码并使用了它。我能用一句话来处理这两种情况吗?
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;
/
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;
/