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