SQL中如何根据字符串长度拼接字符生成固定长度的Updated_Ref_No
最优SQL实现方案
需求的核心是将Ref_No字段右补#到固定8位,直接使用数据库原生的右填充内置函数是最优方案,相比手动计算长度拼接的写法性能更高,代码也更简洁。
兼容大部分主流数据库的写法
支持RPAD函数的数据库(MySQL、PostgreSQL、Oracle、SQL Server 2012及以上版本)可以直接用以下查询:
SELECT Owner_Name, Ref_No, RPAD(Ref_No, 8, '#') AS Updated_Ref_No FROM `owner`;
逻辑说明
RPAD函数三个参数的作用分别是:
- 第一个参数:要处理的原始字符串,这里是
Ref_No - 第二个参数:填充后的总长度,这里固定为8
- 第三个参数:用来填充的字符,这里是
#
完全匹配需求的拼接规则,执行后输出结果和预期完全一致。
低版本SQL Server兼容写法
如果使用的是不支持RPAD函数的低版本SQL Server,可以用REPLICATE函数生成指定数量的#手动拼接:
SELECT Owner_Name, Ref_No, Ref_No + REPLICATE('#', 8 - LEN(Ref_No)) AS Updated_Ref_No FROM [owner];
特殊场景补充
如果业务要求Ref_No长度超过8位时不截断、保留原始内容,可以增加条件判断,以MySQL为例:
SELECT Owner_Name, Ref_No, IF(LENGTH(Ref_No) > 8, Ref_No, RPAD(Ref_No, 8, '#')) AS Updated_Ref_No FROM `owner`;
内容的提问来源于stack exchange,提问作者Samithra niroshana
相关产品推荐
相关产品推荐

