如何在 Oracle 中修剪逗号分隔值中的前导零?
Posted
技术标签:
【中文标题】如何在 Oracle 中修剪逗号分隔值中的前导零?【英文标题】:How to trim leading zeroes in comma separated values in Oracle? 【发布时间】:2017-11-21 16:24:41 【问题描述】:我有一张桌子CUSTOMER (ID,NAME,CORR_ID)
样本数据 -
ID|Name|Corr_ID
1 |John|0239,002319
2 |Mary|000466,00000000054667
这是我需要查看的输出 -
ID|Name|Corr_ID
1 |John|239,2319
2 |Mary|466,54667
【问题讨论】:
逗号和下一个数值之间永远没有空格(而且都是没有其他标点符号的数值),对吧? 是的,逗号后面没有空格……而且都是数值。我还希望结果集按该列排序。 您真的使用 CSV 列存储多个值吗?如果是,请考虑规范化并将数据类型更改为 INT。 @lad2025 - 不,我们不会那样存储它。它是使用 LISTAGG 创建的列。我提到它作为存储数据只是为了提问。 如果你通过 LISTAGG 函数构建 corr_id 为什么不去掉前面的 0' 并在它被构建时去掉它?将其构建为:LISTAGG (LTRIM(column_name,'0'), ',') 【参考方案1】:regexp_replace(corr_id, '(,|^)0+', '\1')
将去除前导零而不去除 1000 或 2003 中的零。
该函数查找逗号或字符串的开头 (^) - 这就是 (,|^) 的含义 - 然后查找一个或多个连续出现的字符“0”。它用第一对括号中的内容替换每个匹配项 - 即用逗号或字符串的开头;它“消除”所有前导零。您需要小心地使用 (,|^) - 确保不会从 1000 或 2003 中删除零。
【讨论】:
以上是关于如何在 Oracle 中修剪逗号分隔值中的前导零?的主要内容,如果未能解决你的问题,请参考以下文章