MySQL从列中删除尾随换行符

xeufq47z  于 2023-10-15  发布在  Mysql
关注(0)|答案(9)|浏览(136)

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

krugob8w

krugob8w1#

您可以直接从SQL中替换它们,方法是在末尾匹配“\r”,然后替换该“\r”。
范例:

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

UPDATE Person SET firstName = REPLACE(firstName, '\r', '')
where firstName LIKE '%\r'
yzckvree

yzckvree2#

只是遇到了这个问题,就这样解决了。

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)和空格。

yuvru6vn

yuvru6vn3#

这将删除所有转义字符:

TRIM(TRAILING '\\' FROM (REPLACE(REPLACE(REPLACE(column_name, '\n', ' '), '\r', ' '), '\\', ' ')))
n53p2ov0

n53p2ov04#

根据操作系统的不同,回车将是“\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]*$', '');
7bsow1i6

7bsow1i65#

我使用以下查询将数据库内容中不需要的字符(空格、分隔符等)替换为空格。
SQL从“fieldName”字段中删除了以下字符:
1.制表符\t“CHAR(9)”替换为空格“CHAR(32)",
1.新行\n“CHAR(10)”替换为空格“CHAR(32)",
1.回车\r“CHAR(13)”替换为空格“CHAR(32)",
1.双空格“CHAR(32)+CHAR(32)”替换为空格“CHAR(32)",
1.最后再修剪

这是我最喜欢的:

UPDATE  tableName 
SET     fieldName = TRIM(REGEXP_REPLACE(fieldName, '[[:space:]]+', CHAR(32))) -- the same as '\s+')
WHERE 1;

这在毫秒内运行数千条记录。:)

首先,我使用了以下查询,它做了同样的事情:

UPDATE  tableName 
SET     fieldName = TRIM(
                  REPLACE(
                    REPLACE(
                      REPLACE(
                        REPLACE(fieldName, 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     fieldName = TRIM(REGEXP_REPLACE(REGEXP_REPLACE(fieldName, '[\\t\\r\\n]', ' '), '\\s+', ' '))
WHERE 1;

但现在最上面的一个运行在毫秒。

ghhkc1vu

ghhkc1vu6#

试试这样的方法:

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

aor9mmx17#

另一个投票支持沃勒克的想法,但更具体地说:

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

本质上,这应该取代回车和回车符。
祝你好运

fsi0uk1n

fsi0uk1n8#

基于EternalHour的answer

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

这一个逐个删除尾随的\r\n,所以它是一个换行符或一个回车符或两者兼而有之,它将被剥离,并且还删除了过程前后的空格。

wswtfjt7

wswtfjt79#

为了简单起见,你可以假设在 * 大多数 * 情况下,字符是空格,\r,\n或\r\n的组合,所以按顺序修剪它们:
UPDATE table_name SET col_name = TRIM(TRAILING“”FROM TRIM(TRAILING“\r”FROM TRIM(TRAILING“\n”FROM col_name)

相关问题