mysql工作记录

批量追加字符类型字段内容

需求

字段类型为字符串,保存的是由页面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。

你可能感兴趣的:(mysql工作记录)