批量追加字符类型字段内容
需求
字段类型为字符串,保存的是由页面textarea控件提交的值,现在需要批量追加一些内容。
遇到的问题
使用concat字符串拼接函数将内容追加在原内容后面,sql执行后提示成功,但实际上没有全部修改成功。
分析
查看表结构
desc test;
表结构.png
查看数据
select * from test;
数据.png
使用concat函数进行拼接字符
select id,note '原内容',concat(note,'要拼接的内容') '拼接后的内容' from test;
拼接结果.png
从拼接结果可以看出,为空(null)的字段拼接后的结果也为空(null),空字符串('')拼接后是有值的,所以我们需要修改判断字段是否为空
修改后的sql
select id,note '原内容',case when note is null then '要拼接的内容' else concat(note,'要拼接的内容') end '拼接后的内容' from test;
正确的拼接结果.png
添加换行符优化拼接结果
select id,note '原内容',case when note is null then '要拼接的内容' else concat(note,'\r\n要拼接的内容') end '拼接后的内容' from test;
优化1.png
但这样会导致一个问题,原来为空字符的内容也会追加一个换行符,需要再优化一下。
select id,note '原内容',case when note is null or note ='' then '要拼接的内容' else concat(note,'\r\n要拼接的内容') end '拼接后的内容' from test;
优化2.png
将空字符('')和空值(null)放在一起处理即可。
最终批量追加内容sql
update test set note = case when note is null or note ='' then '要拼接的内容' else concat(note,'\r\n要拼接的内容') end;
批量追加内容.png
页面显示.png
总结:
- concat函数拼接时,如果字段内容为null,结果为null。
- case when 函数也可用于update语句。
- textarea内容里的换行符对应mysql里的符号是\r\n。
网友评论