如何在Azure中去除alphanumeric字段中字母后的前导零以精简报表展示
字段前导零移除实现方案
核心逻辑为拆分字母前缀与后续10位数字段,将数字段转为整数自动清除前导零后再与前缀拼接,以下为不同Azure数据库场景的实现代码:
Azure SQL(SQL Server)
-- 假设待处理字段名为doc_code,表名为your_table SELECT LEFT(doc_code, PATINDEX('%[0-9]%', doc_code) - 1) + CAST(CAST(SUBSTRING(doc_code, PATINDEX('%[0-9]%', doc_code), 10) AS BIGINT) AS VARCHAR(10)) AS processed_doc_code FROM your_table
测试样例输入DEAP0000013169,输出为DEAP13169,符合需求。
如果你的字段是包含编码、日期等内容的混合字符串(如示例中的SALDOC.RELDOCSDATE DEAP0000013169 3/12/2021),需先提取目标编码段再处理:
WITH extract_code AS ( SELECT SUBSTRING(raw_field, PATINDEX('%[A-Za-z]+[0-9]{10}%', raw_field), 14) AS doc_code FROM your_table ) SELECT LEFT(doc_code, PATINDEX('%[0-9]%', doc_code) - 1) + CAST(CAST(SUBSTRING(doc_code, PATINDEX('%[0-9]%', doc_code), 10) AS BIGINT) AS VARCHAR(10)) AS processed_doc_code FROM extract_code
Azure Database for MySQL
SELECT CONCAT( REGEXP_SUBSTR(doc_code, '^[A-Za-z]+'), CAST(REGEXP_SUBSTR(doc_code, '[0-9]{10}$') AS UNSIGNED) ) AS processed_doc_code FROM your_table
Azure Database for PostgreSQL
SELECT CONCAT( SUBSTRING(doc_code FROM '^[A-Za-z]+'), SUBSTRING(doc_code FROM '[0-9]{10}$')::BIGINT::TEXT ) AS processed_doc_code FROM your_table
注意事项
- 如果字母前缀长度不固定,代码无需调整,正则/PATINDEX会自动匹配第一个数字的分界位置
- 若需要在报表中频繁使用处理后的值,建议新增持久化计算列存储结果,避免每次查询重复计算
内容的提问来源于stack exchange,提问作者Sokianos
相关产品推荐
相关产品推荐

