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

优化获取字符串最后一个字符的SQL写法咨询

优化RUT字符串拆分的SQL实现

需求:处理8位和9位的RUT字符串,输出三列:

  • 原始字符串
  • 去掉最后一个字符的字符串
  • 仅保留最后一个字符

原SQL通过CASE语句判断长度提取最后一位,虽然可正常运行,但写法冗余、扩展性差。以下是更简洁的优化方案:

原代码

select rut, 
   SUBSTR(RUT, 1, LENGTH(RUT)-1) as RUT_SD,
   case when  length(rut) = 9 then 
              SUBSTR(RUT, 9, LENGTH(RUT)-1) 
        when  length(rut) = 8 then
              SUBSTR(RUT, 8, LENGTH(RUT)-1) 
        end as DV

from (select '244447232' rut union all
      select '3446545k')  

优化方案1:利用SUBSTR负索引

大部分SQL方言(如MySQL、PostgreSQL、Oracle)支持负索引表示从字符串末尾计数,直接提取最后一位:

select rut,
       SUBSTR(RUT, 1, LENGTH(RUT)-1) as RUT_SD,
       SUBSTR(RUT, -1) as DV -- 无需判断长度,直接取最后一个字符
from (select '244447232' rut union all
      select '3446545k')

优化方案2:使用RIGHT函数

若你的SQL方言支持RIGHT()函数(如MySQL、SQL Server),写法更直观:

select rut,
       SUBSTR(RUT, 1, LENGTH(RUT)-1) as RUT_SD,
       RIGHT(RUT, 1) as DV -- 直接提取右侧1位字符
from (select '244447232' rut union all
      select '3446545k')

优化优势

  • 代码简洁,移除冗余CASE分支
  • 扩展性强:后续出现其他长度的RUT字符串,无需修改代码即可适配
  • 逻辑直观,降低维护成本

内容的提问来源于stack exchange,提问作者Nelson Romero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:12:49