db2中替换功能的起始位置

时间:2019-05-29 14:49:02

标签: replace db2

我正在将某些Access VBA功能转换为DB2,发现了至关重要的区别。 VBA使您可以在正在处理的字符串中指定起点。 DB2没有该选项。它从位置1开始,并替换整个字符串中要替换的所有内容。如何使DB2在字符串中的指定位置开始替换?例如,我的字符串是“ Incongruent Plastics Incorporated”,我想将位置22处的第二个“ Inc”替换为“ Inc”。我在WHILE循环中进行此操作,遍历长字符串,替换其中的一部分,直到它们小于指定的最大值(取决于字段为15或30)为止。

我查看了“定位”功能,但不确定是否正确。

Replace(a.PAYEE_STD_NAME, B.FullWord, B.abbreviation, B.mLastWord)

a.PAYEE_STD_NAME是我要查看的字符串,B.FullWord是我要替换的字符串,B.abbreviation是我要替换的字符串,B.mLastWord是我要开始替换的位置。类似于Replace(“ Incongruent Plastics Incorporated”,“ Incorporated”,“ Inc”,22)

我希望在需要的位置开始替换字符,直到字符串的后面,而不是开始。

谢谢!

2 个答案:

答案 0 :(得分:0)

不太擅长DB2,但通常可以通过使用SUBSTR

来解决该限制。

相当于Replace(a.PAYEE_STD_NAME, B.FullWord, B.abbreviation, B.mLastWord)的是:

CONCAT(SUBSTR(a.PAYEE_STD_NAME, 1, B.mLastWord - 1), Replace(SUBSTR(a.PAYEE_STD_NAME, b.mLastWord), B.FullWord, B.abbreviation))

这假设b.mLastWord大于1,如果为1,则可以使用普通的REPLACE

答案 1 :(得分:0)

也许考虑使用REGEXP_REPLACE https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061496.html

,并且可能考虑使用可恢复的SQL而不是循环逻辑