如何在Firebird SQL中更新替换指定列的第n位字符?STUFF函数不可用
Firebird SQL替换字符串指定位置字符的替代方案
Firebird SQL本身没有STUFF函数,要实现替换字符串第n位字符的需求,可以用字符串截取拼接的方式实现,核心用到SUBSTRING函数和字符串连接符||。
对应你给出的示例代码
原SQL想要把字符串'FFFFF02FTF'的第1位替换成'T',在Firebird里可以这么写:
UPDATE SYSTEM a SET a.CONFIG = 'T' || SUBSTRING(a.CONFIG FROM 2) WHERE a.ID = 'AB'
(注:如果是替换固定字符串'FFFFF02FTF',直接写'TFFFF02FTF'更简单,但这里假设你是要替换字段CONFIG的内容,所以用字段值截取拼接)
通用替换逻辑
如果要替换任意位置pos的length个字符为新字符串new_str,通用写法是:
UPDATE 表名 SET 字段名 = SUBSTRING(字段名 FROM 1 FOR pos - 1) || new_str || SUBSTRING(字段名 FROM pos + length) WHERE 条件
举几个不同场景的例子:
- 替换第5位开始的2个字符为
'XX':UPDATE SYSTEM a SET a.CONFIG = SUBSTRING(a.CONFIG FROM 1 FOR 4) || 'XX' || SUBSTRING(a.CONFIG FROM 7) WHERE a.ID = 'AB' - 替换最后3位为
'XYZ':UPDATE SYSTEM a SET a.CONFIG = SUBSTRING(a.CONFIG FROM 1 FOR CHAR_LENGTH(a.CONFIG) - 3) || 'XYZ' WHERE a.ID = 'AB'
需要注意的是,使用SUBSTRING时如果截取范围超出字符串长度,会返回空字符串,不影响拼接结果。
内容的提问来源于stack exchange,提问作者user9580555
相关产品推荐
相关产品推荐

