web-dev-qa-db-ja.com

MySQL TRIM関数は、改行や改行を削除しませんか?

私の実験では、そうは思われません。これが本当に当てはまる場合、改行を削除するための最良の方法は何ですか?現在、TRIMが削除する文字を受け入れるパラメーターを試しています。トリミング\nおよび\r

26
Thomas Owens

MySQLのTrim()はスペースのみを削除します。

Trim()を繰り返し使用しない限り、MySQLのすべての種類の末尾と先頭の空白を削除する組み込みの方法があるとは思いません。

別の言語を使用して現在のデータをクリーンアップし、入力が今後サニタイズされることを確認することをお勧めします。

7
Peter Crabtree

私の改行は文字列の途中にあり、ソースデータを制御できませんでした。次のmysqlコマンドは私のために働きました:

REPLACE(FIELD,'\r\n',' ')
45
David Hitchen

はい、Trim()はMySQLで動作します。 2つの選択肢があります。

1)選択してください:

select trim(BOTH '\n' from [field_name]) as field

それでもうまくいかない場合は、'\r'、それがうまくいかない場合は、'\n\r'

2)テーブルの不良データを更新に置き換えます...

update [table_name] set [field_name] = trim(BOTH '\n' from [field_name])

最初に選択して、どの改行があるかを判断することをお勧めします(\ rまたは\ n)。

18
Lucas

標準のMySQL trim関数は、文字列内の文字ではなく、完全に一致する文字列のみを削除するため、私が知っている他の言語のトリム関数とは異なります。この保存された関数は、PHPで見つける通常のトリムに似ています。または、pythonなどで削除されます。

CREATE FUNCTION `multiTrim`(string varchar(1023),remove varchar(63)) RETURNS varchar(1023) CHARSET utf8
BEGIN
  -- Remove trailing chars
  WHILE length(string)>0 and remove LIKE concat('%',substring(string,-1),'%') DO
    set string = substring(string,1,length(string)-1);
  END WHILE;

  -- Remove leading chars
  WHILE length(string)>0 and remove LIKE concat('%',left(string,1),'%') DO
    set string = substring(string,2);
  END WHILE;

  RETURN string;
END;

その後、次のことができるはずです。

select multiTrim(string,"\r\n\t ");

そして、すべての改行、タブ、スペースを削除する必要があります。

9
rjmunro
select trim(both '\n' from FIELDNAME) from TABLE;
3
LeppyR64

charを作成することによってのみ機能します。

trim(both char(13) from fieldname)
3
neil fletcher

私は同じ問題に直面しました。完璧な解決策はありません。私の場合、フィールドの長さが6であるはずだったので幸運でした。そのため、次のようなクエリを使用しました。

update events set eventuniqueid = substring(eventuniqueid, 1, 6) where length(eventuniqueid) = 7;

必要に応じて最適なオプションを選択する必要があります。 '\ n'と '\ r\n'を置き換えるとうまくいかず、時間が無駄になってしまいました。

0
Punit Raizada

上記の答えを組み合わせると、うまくいきます。フィールドの最初と最後で改行を置き換える完全な例は次のとおりです。

UPDATE table SET field=REPLACE(field, field, TRIM(BOTH '\r\n' FROM field))
0
Ilya