Como remover novos caracteres de linha de linhas de dados no mysql?

87

Posso percorrer todas as linhas em um script php e fazer

UPDATE mytable SET title = "'.trim($row['title']).'" where id = "'.$row['id'].'";

e o corte pode remover \ n

Mas eu estava pensando se algo igual poderia ser feito em uma consulta.

 update mytable SET title = TRIM(title, '\n') where 1=1

será que vai dar certo? Posso então apenas executar essa consulta sem precisar fazer um loop!

obrigado

(PS: eu poderia testá-lo, mas a tabela é muito grande e não quer mexer com os dados, então pensei se você já testou algo assim antes)

TigerTiger
fonte
Você pode simplesmente se livrar da cláusula where ... tenha cuidado com o corte, pois você pode ter outros caracteres no conjunto (como retorno de carro '\ r')
jkelley
Você deveria ter testado isso antes de fazer esta pergunta. Funciona. Se você quiser testar isso em uma mesa grande, pode usar a cláusula LIMIT.
Lukasz Lysik
O que há de errado com a cláusula WHERE? Só por curiosidade
Phill Pafford,
@PhillPafford Nada, tecnicamente, é apenas redundante. (Eu sei que isso tem> 5 anos, mas pode ajudar outras pessoas a lê-lo.)
Bing

Respostas:

121

sua sintaxe está errada:

update mytable SET title = TRIM(TRAILING '\n' FROM title)

Adição:

Se o caractere de nova linha estiver no início do campo:

update mytable SET title = TRIM(LEADING '\n' FROM title)
pescoço longo
fonte
6
vindo do MSSQL, essa sintaxe era muito estranha para mim. Achei que você estava usando pseudocódigo! mas funcionou :)
Jeff,
Documentação em TRIM () para referência.
Mark G
121
UPDATE test SET log = REPLACE(REPLACE(log, '\r', ''), '\n', '');

trabalhou para mim.

embora seja semelhante, também eliminará \ r \ n

http://lists.mysql.com/mysql/182689

Łukasz Rysiak
fonte
8
isso não remove o resto \ n, remove todos os \ n, o que não é desejado aqui.
longneck de
20
Isso pode não ter funcionado para o OP exato, mas ajudou em um ponto com o qual eu estava lidando, +1
Mike Purcell
Funcionou para mim, obrigado.
Exoon,
exatamente o que eu precisava.
user3453428
14

1) Substitua todas as novas linhas e caracteres de tabulação por espaços.

2) Remova todos os espaços à esquerda e à direita .

 UPDATE mytable SET `title` = TRIM(REPLACE(REPLACE(REPLACE(`title`, '\n', ' '), '\r', ' '), '\t', ' '));
Geo
fonte
9

update mytable set title=trim(replace(REPLACE(title,CHAR(13),''),CHAR(10),''));

Acima está funcionando bem.

Phaneendra Kasalanati
fonte
3
Este é útil quando '\ n' não está funcionando (testado no mysql workbench)
Mohamed23gharbi
6

Remove os retornos finais ao importar do Excel. Ao executar isso, você pode receber um erro informando que não há WHERE; ignorar e executar.

UPDATE table_name SET col_name = TRIM(TRAILING '\r' FROM col_name)
Ulysnep
fonte
2
UPDATE mytable SET title=TRIM(REPLACE(REPLACE(title, "\n", ""), "\t", ""));
Risse
fonte
4
isso não remove o resto \ n, remove todos os \ n, o que não é desejado aqui.
longneck de
0

Meus 2 centavos.

Para me livrar dos meus \ n's, eu precisava fazer um \\ n. Espero que ajude alguém.

update mytable SET title = TRIM(TRAILING '\\n' FROM title)
Darshan Montgomery
fonte
0

Para novos caracteres de linha

UPDATE table_name SET field_name = TRIM(TRAILING '\n' FROM field_name);
UPDATE table_name SET field_name = TRIM(TRAILING '\r' FROM field_name);
UPDATE table_name SET field_name = TRIM(TRAILING '\r\n' FROM field_name);

Para todos os caracteres de espaço em branco

UPDATE table_name SET field_name = TRIM(field_name);
UPDATE table_name SET field_name = TRIM(TRAILING '\n' FROM field_name);
UPDATE table_name SET field_name = TRIM(TRAILING '\r' FROM field_name);
UPDATE table_name SET field_name = TRIM(TRAILING '\r\n' FROM field_name);
UPDATE table_name SET field_name = TRIM(TRAILING '\t' FROM field_name);

Leia mais: Função TRIM do MySQL

Lue Inubashiri
fonte
0

Brincando com as respostas acima, esta funciona para mim

REPLACE(REPLACE(column_name , '\n', ''), '\r', '')
Jay_mziray
fonte