Oracle SQL中如何从动态字符串提取最后4位数字
提取字符串中的最后4位有效数字
需求说明
需要从格式无固定规律的字符串中,提取所有数字字符拼接成纯数字串后,取该串的最后4位,而非原字符串位置上的最后4位。
示例数据
| Value | 预期结果 |
|---|---|
| 123456789 | 6789 |
| 21-34-567 | 4567 |
| 2150-X1234-YZ | 1234 |
| 21-22-93-001 | 3001 |
修正后的建表及插入语句
原建表语句存在语法错误,修正为Oracle兼容版本:
CREATE TABLE regex_string (Value VARCHAR2(100)); INSERT INTO regex_string VALUES('123456789'); INSERT INTO regex_string VALUES('21-34-567'); INSERT INTO regex_string VALUES('2150-X1234-YZ'); INSERT INTO regex_string VALUES('21-22-93-001');
解决方案
通过两步操作实现需求:先清理字符串中的非数字字符,再截取纯数字串的最后4位。使用Oracle的正则表达式和字符串截取函数即可完成:
SELECT Value, SUBSTR(REGEXP_REPLACE(Value, '[^0-9]', ''), -4) AS last_four_digits FROM regex_string;
代码解释
REGEXP_REPLACE(Value, '[^0-9]', ''):匹配所有非数字字符并替换为空,得到仅包含数字的纯字符串SUBSTR(..., -4):从字符串末尾开始截取4个字符,直接获取最后4位数字
验证结果
执行上述SQL后,输出结果与预期完全一致:
| Value | last_four_digits |
|---|---|
| 123456789 | 6789 |
| 21-34-567 | 4567 |
| 2150-X1234-YZ | 1234 |
| 21-22-93-001 | 3001 |
内容的提问来源于stack exchange,提问作者Velocity
相关产品推荐
相关产品推荐

