如何根据条件动态修改字符串片段及{reason}\nIf含义与SQL实现
我在查看数据表中的某一项值时:
数据表字段值示例
查看最后一行内容可以发现其中存在{reason}\nIf片段。
{reason}\nIf的含义 这个片段不是SQL的特殊语法,属于字符串模板拼接异常残留的内容:
{reason}是各类模板引擎(业务代码、存储过程里常用的字符串模板规则)里的占位符,正常运行逻辑下这个位置会被替换为实际的业务原因文本\n是通用的换行转义符,代表这个位置原本应该是文本换行- 末尾的
If是换行后下一句文本的开头
这个内容被存到数据库里,本质是赋值逻辑漏了占位符替换步骤,直接把未渲染的原始模板字符串存进了表字段。
修改
{reason}取值的实现方法 完全可以通过SQL函数完成存量数据修正,根源问题修复则需要对应调整生成该字段的逻辑:
- 存量错误数据修正:直接用SQL内置的字符串替换函数即可,通用写法如下,绝大多数关系型数据库(MySQL、PostgreSQL、Oracle、SQL Server)都支持
REPLACE函数:
如果需要根据每条数据的其他字段值动态替换-- 将字段中所有{reason}占位符替换为指定的实际文本 UPDATE 目标表名 SET 存储该内容的字段名 = REPLACE(存储该内容的字段名, '{reason}', '需要替换成的实际原因内容') WHERE 存储该内容的字段名 LIKE '%{reason}%';{reason}的内容,可以搭配CASE WHEN、CONCAT字符串拼接、SUBSTRING截取函数组合实现,不需要依赖上层业务代码。 - 后续新增数据的逻辑修复:如果这个字段值是由视图、存储过程生成的,直接检查对应视图/函数的定义代码,找到硬写
{reason}占位符的位置,把占位符替换为对应的业务字段取值、或者判断逻辑生成的原因文本即可;如果是上层业务代码传入的值,就去排查代码里的模板渲染逻辑,补上占位符替换的步骤再入库。
内容的提问来源于stack exchange,提问作者Alwaysblue
相关产品推荐
相关产品推荐

