我正在将某些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)
我希望在需要的位置开始替换字符,直到字符串的后面,而不是开始。
谢谢!
答案 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而不是循环逻辑