我创建了一个查询来查找我传递的值是字母数字还是数字 使用此查询:
SELECT COUNT (*)
INTO l_col
FROM DUAL
WHERE REGEXP_LIKE (l_columnvalue, '^\d+(\.\d+)?$', '');
IF l_col > 0 THEN
NULL;
ELSE
l_columnvalue := '"' || l_columnvalue || '"';
END IF;
此代码检查l_columnvalue
是否为数字,如果是,则l_col
将大于0,否则l_columnvalue
将用引号" "
括起来。
现在我想检查columnvalue
是否为数字且其长度是否等于7.如果是,那么它不应该在引号""
中,否则如果它是一个数字及其长度小于或大于7则应该在引号中。
我如何使用正则表达式?
**Example :**
如果l_columnvalue
是15679
,那么
query1将返回1并且if
语句将相应地执行。
如果是'abdg12'
则query1将返回null
,那么将执行else语句,输出将为"abdg12"
现在我希望如果l_columnvalue
是数字且其长度不是7,例如:123
那么查询1不应该返回1,而输出应该是"123"
如何去做?
答案 0 :(得分:0)
只需添加另一个条件,如下所示
IF ( l_col > 0 AND length(l_columnvalue) > 7 )
答案 1 :(得分:0)
如果您计划在PL / SQL中实现此逻辑(看起来像它),那么函数(无论是独立函数还是函数的一部分)可能看起来像这样:
create or replace function nameTheFunction(
p_expr in varchar2 -- based on information you've provided
) return varchar2 -- an actual parameter may be either numeric
is -- or alphanumeric, thus varchar2
l_result varchar2(101); -- adjust the size as needed
l_isDigit boolean;
begin
l_isDigit := regexp_like(p_expr, '^[[:digit:]]+$');
return case
when (l_isDigit and length(p_expr) < 7) or (not l_isDigit)
then dbms_assert.enquote_name(p_expr)
else p_expr
end;
end;
无需使用select into
语句,无需在PL / SQL和SQL引擎之间进行额外切换。 regexp_like()
函数可以直接在PL / SQL块中使用:
测试用例:
column res format a11
clear screen;
with t1(col) as(
select '1234567' from dual union all
select 'ah123' from dual union all
select '1234' from dual
)
select nameTheFunction(col) as res
from t1
结果:
RES
-----------
1234567
"AH123"
"1234"
答案 2 :(得分:0)
虽然您可以使用正则表达式执行此操作,但还有其他选项。例如,您可以尝试将字符串转换为NUMBER - 如果成功,则为数字,您可以检查长度 - 如果转换失败,则不是数字。例如:
DECLARE
strNumeric_value VARCHAR2(100) := '1234567890';
strNonnumeric_value VARCHAR2(100) := '123A56789o';
nValue NUMBER;
BEGIN
BEGIN
nValue := TO_NUMBER(strNumeric_value);
EXCEPTION
WHEN OTHERS THEN
nValue := NULL; -- not numeric
END;
DBMS_OUTPUT.PUT_LINE('strNumeric_value ' ||
CASE
WHEN nValue IS NOT NULL THEN
'IS NOT '
ELSE
'is '
END || 'numeric');
BEGIN
nValue := TO_NUMBER(strNonnumeric_value);
EXCEPTION
WHEN OTHERS THEN
nValue := NULL; -- not numeric
END;
DBMS_OUTPUT.PUT_LINE('strNonnumeric_value ' ||
CASE
WHEN nValue IS NOT NULL THEN
'IS NOT '
ELSE
'is '
END || 'numeric');
END;
分享并享受。