Oracle SQL:字符串列末尾两位数字提取与计算实现咨询
实现方案
针对不同SQL数据库,提供以下实现代码:
MySQL
SELECT contract, CASE WHEN RIGHT(contract, 2) REGEXP '^[0-9]{2}$' THEN CAST(RIGHT(contract, 2) AS UNSIGNED) * 100 ELSE 20 END AS result FROM your_table;
逻辑说明:
RIGHT(contract, 2)提取字符串末尾两位REGEXP '^[0-9]{2}$'验证提取的内容是否为纯两位数字- 符合条件则转为整数并乘以100,否则返回固定值20
PostgreSQL
SELECT contract, CASE WHEN RIGHT(contract, 2) ~ '^[0-9]{2}$' THEN TO_NUMBER(RIGHT(contract, 2), '99') * 100 ELSE 20 END AS result FROM your_table;
逻辑说明:
RIGHT(contract, 2)提取字符串末尾两位~ '^[0-9]{2}$'用正则匹配验证是否为纯两位数字- 符合条件则转为数字并乘以100,否则返回固定值20
SQL Server
SELECT contract, CASE WHEN LEN(RIGHT(contract, 2)) = 2 AND TRY_CAST(RIGHT(contract, 2) AS INT) IS NOT NULL THEN TRY_CAST(RIGHT(contract, 2) AS INT) * 100 ELSE 20 END AS result FROM your_table;
逻辑说明:
RIGHT(contract, 2)提取字符串末尾两位- 先判断提取内容长度是否为2,再用
TRY_CAST验证是否可转为整数(确保是纯数字) - 符合条件则转为整数并乘以100,否则返回固定值20
边界情况处理
- 当
contract长度不足2位时,提取的内容长度小于2,验证不通过,直接返回20 - 当末尾两位包含非数字字符时,验证不通过,返回20
内容的提问来源于stack exchange,提问作者Es-Dot
相关产品推荐
相关产品推荐

