You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中使用substr遇问题,求实现获取末尾字符并返回对应结果的函数

Oracle函数实现:按末尾字符规则返回结果

完整函数代码

CREATE OR REPLACE FUNCTION GET_LAST_CHAR_RESULT(input_str IN VARCHAR2) RETURN VARCHAR2 IS
    last_char VARCHAR2(1);
BEGIN
    -- 获取字符串最后一个字符
    last_char := SUBSTR(input_str, -1);
    
    -- 判断是否为字母
    IF REGEXP_LIKE(last_char, '^[A-Za-z]$') THEN
        RETURN last_char || ' - TEXT';
    -- 判断是否为数字
    ELSIF REGEXP_LIKE(last_char, '^[0-9]$') THEN
        IF MOD(TO_NUMBER(last_char), 2) = 1 THEN
            RETURN last_char || ' - ODD';
        ELSE
            RETURN last_char || ' - EVEN';
        END IF;
    ELSE
        -- 非字母数字的情况,可按需调整返回内容
        RETURN last_char || ' - NON-ALPHANUMERIC';
    END IF;
EXCEPTION
    WHEN OTHERS THEN
        RETURN 'INVALID INPUT';
END;
/

关键问题解析

  1. 末尾字符获取
    SUBSTR(input_str, -1)是Oracle取最后一个字符的简洁写法,-1表示从倒数第一个位置开始取,默认取到字符串结尾(即1个字符)。你遇到的number or argument called for =错误,大概率是SUBSTR参数顺序写错(比如把起始位置和长度搞反),或是函数调用时传递的参数数量不匹配。

  2. 正则匹配修正
    用REGEXP_LIKE(last_char, '^[A-Za-z]$')时,^和$锚点能确保只匹配单个字符,避免之前没加锚点导致的误判(比如字符串中包含字母但末尾不是字母时仍匹配)。

  3. 数字奇偶判断
    先通过TO_NUMBER将字符转为数字,再用MOD函数取模2,结果为1则是奇数,为0则是偶数。

测试示例

-- 数字奇数测试
SELECT GET_LAST_CHAR_RESULT('fdsfdsfdd23') FROM DUAL;
-- 返回:3 - ODD

-- 字母测试
SELECT GET_LAST_CHAR_RESULT('jsdhfjsdhjfhdksf') FROM DUAL;
-- 返回:f - TEXT

-- 数字偶数测试
SELECT GET_LAST_CHAR_RESULT('abc4') FROM DUAL;
-- 返回:4 - EVEN

内容的提问来源于stack exchange,提问作者Pshya Jindal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:15:41