扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
1、去掉mysql数据库中某字段的换行符和回车符:replace函数
目前创新互联已为数千家的企业提供了网站建设、域名、雅安服务器托管、网站改版维护、企业网站设计、庄浪网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
UPDATE student SET name = REPLACE(REPLACE(title,CHAR(10),''),CHAR(13),'') WHERE ID = xxxxxx;
注解:CHAR(10),'':将换行符CHAR(10)替换成空串,可理解为删除换行符
CHAR(13),'':将回车符CHAR(13)替换成空串,可理解为删除回车符
2、往mysql某个字段中插入换行符和回车符:concat函数
concat函数可以连接一个或者多个字符串,若其中一个为null,则返回null
UPDATE student SET name = concat('字符串1',CHAR(10),CHAR(13),'字符串2') WHERE ID = xxxxx;
注解:这样就将 字符串1 和 换行符 和 回车符 和字符串2 拼接在一起了
后记:查询某个字段是否含有换行符和回车符
select *from student where name like '% \n\r %'
import_table(importTable) 的延申功能:可定制化行输入。
import_table(importTable) 我们之前有介绍过,是一款并行导入各种格式文本的工具,封装了 MySQL 语句 load data local infile。
比如说要导入一个以 TAB 为分隔符的文本数据文件:/tmp/sample_ytt.txt 到表:ytt_new.t1,可以执行下面语句:
上面结果是 load data infile 语句的导入结果。如果改用 import_table 方法来做同样的事情,基于 Python 语法,使用方法如下:
那接下来看另外一个需求:在导入文本文件时对每行做预处理(例如在导入数据之前更改列 r2 的值为 mod(r1,10),列 r5 的值为 abs(r4-46) ),这样可以减少导入后再次处理的时间开销。
这个需求用 load data infile 语句非常容易实现:(导入时更改列 r2 和 r5 的数据,类似 UPDATE 语法)
那如果要用 util.import_table(importTable) 来实现上面的需求,在 MySQL 8.0.22 之前是没办法的。
随着 MySQL 8.0.22 的发布,MySQL 对 import_table 方法做了些扩充功能,其中增加了一个选项 “decodeColumns” 可以实现字段的预先输入定制化功能,并且还可以更加丰富。
接下来用 import_table 来实现上面的需求,定制化字段 r2 和 r5:
以上 Options 选项,见下图:
我来具体解释下上图的含义:蓝色字体 columns 对应的数组分别指定数据文件中的每行字段,也就是默认的 TAB 分隔符所分割的每列值,1 和 2 代表占位符,1 代表数据文件中每行的第一个列,2 代表数据文件中每行的第四列,decodeColumns 字典分别对需要预先输入的字段做处理。比如 r1 字段保留为变量 @1,r2 字段对应 mod(r1,10) 等。
如果还是不太理解变换规则,可以临时打开 general log, 上面 import_table(importTable)对应的 MySQL 日志为:
以上日志写的很清楚,内部转换为最基本的load data infile语法。
那这里我简单解读了下 MySQL 8.0.22 对 MySQL Shell 的一项定制化输入文本文件的新特性,更多的新特性可以继续关注。
题主你好,关于你的问题,如何表达换行,可以使用以下的代码条件,仅供参考。
java类中写sql语句,查询条件包含换行
detachedCriteria.add(Restrictions.or(
Restrictions.like("chengBanDanWeiIds", rForm.getChengBanDanWeiIds()+(char)13, MatchMode.START),
Restrictions.or(
Restrictions.like("chengBanDanWeiIds", rForm.getChengBanDanWeiIds()+ (char)13, MatchMode.END),
Restrictions.eq("chengBanDanWeiIds", rForm.getChengBanDanWeiIds())
)));
换行不用CHAR(13),用(char)13
解决办法是存到数据库里面的时候做一次转换,在从数据库里读取数据的时候再做一次转换,这个转换数据库有函数可以自己转,不知道你用的什么数据库,一般都会有字符替换函数的。
解决方法:
UPDATE tablename SET field = REPLACE(REPLACE(field, CHAR(10), ''), CHAR(13), '');
char(10): 换行符
char(13): 回车符
MySQL的trim函数没办法去掉回车和换行,只能去掉多余的空格,可以用MySQL的replace函数,解决掉这个问题,具体解决办法如下:
假设想要审核数据库中内容为“我爱你
”的短信息(注意内容后有换行)通过(status改变成1)
之前的SQL语句是不起作用的
UPDATE `tran`
SET `status` = '1'
WHERE `msg` = '我爱你';
修改之后的语句
UPDATE `tran`
SET `status` = '1'
WHERE trim( replace( `msg`, '\r\n', ' ' ) ) = '我爱你';
把数据中的回车换行等替换成空格之后再trim掉,就达到目的了,虽然不是特别完美,但是由于没办法在用户录入的时候控制,所以只能出此下策,好在MySQL内置函数的效率还是很有保证的。
UPDATE `tran`
SET `status` = '1'
WHERE trim( trim(
BOTH '\r\n'
FROM content ) ) = '我爱你'
用了两个trim,这样的好处是不会替换内容中间的换行和回车,只会处理头尾的空格换行回车,相当于php中trim函数的作用了。
@echo off
mysql -uroot -pabc mydatabase --execute="create table a(id int(10))"
mysql -uroot -pabc mydatabase --execute="create table b(id int(10))"
或者把后面的语句写到cretab.sql里
mysql -uroot -pabc mydatabasecretab.sql
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流