如何在 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 中修剪逗号分隔值中的前导零?的主要内容,如果未能解决你的问题,请参考以下文章

将使用 PHP 创建的 csv 文件导入 Excel 时,如何在数字字符串值中保留前导零?

如何从字母数字文本中删除前导零?

如何从 Spring MVC 中的请求参数中修剪空格

从字符串值中删除空格(前导和尾随)

Oracle如何获取逗号分隔字符串中的出现次数

如何在Oracle中的case语句中添加两个用逗号分隔的引号的字符