MySQL:从列中删除尾随换行符

7

我想要从我的MySQL列中删除尾随的换行符。 trim()只能删除空格,但我也想删除尾随的换行符。 有人可以提供建议吗?


1
可能是MySQL TRIM函数是否不会修剪换行符或回车符?的重复问题。 - hjpotter92
9个回答

14

你可以直接从SQL中匹配结尾的"\r",然后替换掉它们。

示例:

UPDATE Person SET firstName = REPLACE(firstName, '\n', '')
where firstName LIKE '%\n'
或者
UPDATE Person SET firstName = REPLACE(firstName, '\r', '')
where firstName LIKE '%\r'

1
不仅会替换尾随的内容,在文本字段中可能会造成灾难性后果。 - some-non-descript-user
这将删除所有转义字符的实例,而不仅仅是尾随的。如果有尾随空格,这也不起作用。 - Joel Karunungan

3

我刚刚遇到了这个问题,解决方法如下:

UPDATE table_name SET col_name = REPLACE(TRIM(TRAILING ' ' FROM col_name), 
                                         TRIM(TRAILING '\r' FROM col_name), 
                                         TRIM(TRAILING '\n' FROM col_name))

这将会移除文本中的换行符(\n),回车符(\r)和空格。


4
这段代码实际上是将回车符(\r)替换为换行符(\n),区别很大。 - robotik

2
这将移除所有转义字符:
TRIM(TRAILING '\\' FROM (REPLACE(REPLACE(REPLACE(column_name, '\n', ' '), '\r', ' '), '\\', ' ')))

1
以上代码可以工作,但是在做了一个小改动之后,我必须在\n前面加上一个额外的“\”,所以我的代码看起来像这样:TRIM(TRAILING '\\' FROM (REPLACE(REPLACE(REPLACE(column_name, \\n', ' '), '\r', ' '), '\\', ' '))) - Neo

1
根据操作系统的不同,回车符将是"\r\n"或只是"\n"。它不总是"\r\n"。
正确的清理方法是首先删除新行后可能出现的空格。然后删除换行转义字符,再删除可能出现在换行符之前的空格。
UPDATE table SET column = TRIM(TRAILING ' ' FROM TRIM(TRAILING '\r' FROM TRIM(TRAILING '\n' FROM TRIM(TRAILING ' ' FROM column))));

这种方法无法处理嵌套的尾随空格和换行符等更复杂的情况。你需要使用正则表达式替换,但并非所有的数据库版本都支持。
UPDATE table SET column = REGEXP_REPLACE(column, '[ \\r\\n]*$', '');

1

我使用以下查询从数据库内容中删除不需要的字符

UPDATE  tableName 
SET     titel = TRIM(
                  REPLACE(
                    REPLACE(
                      REPLACE(
                        REPLACE(titel, CHAR(9), CHAR(32)), 
                        CHAR(13), CHAR(32)), 
                      CHAR(10), CHAR(32)),
                    CONCAT(CHAR(32), CHAR(32)), CHAR(32))
                  )
WHERE 1;

Joel Karunungan的启发,以下查询执行相同操作:
UPDATE  tableName 
SET     titel = TRIM(REGEXP_REPLACE(REGEXP_REPLACE(seminar_titel, '[\\t\\r\\n]', ' '), '\\s+', ' '))
WHERE 1;

下面的字符已从“title”字段中删除:
  1. 制表符 \t "CHAR(9)" 替换为空格 "CHAR(32)",
  2. 换行符 \n "CHAR(10)" 替换为空格 "CHAR(32)",
  3. 回车符 \r "CHAR(13)" 替换为空格 "CHAR(32)",
  4. 双空格 "CHAR(32)+CHAR(32)" 替换为空格 "CHAR(32)",
  5. 并在末尾修剪!

这在几秒钟内处理成千上万条记录。:)


0

基于EternalHour的答案

UPDATE TABLE_NAME SET `COLUMN_NAME` = TRIM(TRIM(TRAILING '\r' FROM TRIM(TRAILING '\n' FROM TRIM(`COLUMN_NAME`))))

这个函数会逐个删除末尾的\r\n,所以无论是换行符还是回车符或者两者都有,都将被剥离,并且在此过程中也会删除前后的空格。


0

可以尝试这样做:

REPLACE(FIELD,'\r\n',' ')

0
为了简单起见,你可以假设在大多数情况下字符是一些空格、\r、\n或\r\n的组合,所以要将它们修剪掉:
更新表名 SET 列名 = TRIM(TRAILING ' ' FROM TRIM(TRAILING '\r' FROM TRIM(TRAILING '\n' FROM 列名)))

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0

支持Wallack的想法,但更具体地说:

Update YOURTABLENAME set YOURCOLUMNNAME = replace(YOURCOLUMNNAME, '\r\n','')

本质上,这应该将回车和换行符替换为空。

祝你好运。


此代码将 First{linebreak}Second 替换为 FirstSecond - robotik
这里缺少去除空格的操作。 - Joel Karunungan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接