【问题标题】:How to replace string in "select" statement如何在“select”语句中替换字符串
【发布时间】:2018-12-25 09:42:34
【问题描述】:

我需要在每六位数字后添加逗号,但我不知道它的长度,我不能使用循环。 提前致谢。

我尝试了 REGEXP_REPLACE DB2 函数,但它无法将我的列识别为字符串。

例如,我需要将“123456123456”替换为“123456, 123456”。

【问题讨论】:

  • 欢迎来到 SO。请向我们提供一些代码以供研究。到目前为止,您尝试过什么?
  • 请提供表架构以及您使用 REGEXP_REPLACE 的 SQL。您可能只需要 CAST 到一个字符串,但没有此信息,很难说。

标签: database db2 db2-400


【解决方案1】:

试试这个:

select rtrim(xmlcast(xmlquery('fn:replace($s, "([0-9]{6})", "$1, ")' passing str as "s") as varchar(4000)), ', ')
from table(values ('123456123456')) t(str);

【讨论】:

  • 按原样在我的 10.5 上工作。您的 db2 平台和版本是什么?
  • 我不知道确切的版本,但它低于 10(可能是 9.7)。
  • 你知道另一个变种或为什么 REGEXP_REPLACE 不起作用?
  • REGEXP_REPLACE 仅在 11.1 中引入。顺便说一句,我在 9.7 和 10.1 上检查了我的示例。这适用于 10.1。在 9.7 中的 rtrim 函数中没有第二个参数(在我们的例子中,它删除了尾随的 ', '),但 fn:replace 在那里工作。所以,很奇怪,这个示例不适用于您的 db2。检查您使用的确切 db2 平台和版本。
  • 我已经在 4 个系统上尝试过(V7R1、V7R2、V7R3、V7R4 版本),但它无法正常工作。
猜你喜欢
  • 2015-09-11
  • 2020-06-27
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2023-03-23
相关资源
最近更新 更多