2つのフィールド(国とISOコード)を持つテーブルがあります:
Table1
field1 - e.g. 'Afghanistan' (without quotes)
field2 - e.g. 'AF'(without quotes)
一部の行では、2番目のフィールドの開始および/または終了に空白があり、クエリに影響を与えています。
Table1
field1 - e.g. 'Afghanistan' (without quotes)
field2 - e.g. ' AF' (without quotes but with that space in front)
(SQLで)テーブルを検索してfield2の空白を検索/置換する方法はありますか?
TRIM を探しています。
UPDATE FOO set FIELD2 = TRIM(FIELD2);
あなたの回答と他のリンクから作成した一般的な回答は、私にとってはうまくいき、コメントで書いています:
UPDATE FOO set FIELD2 = TRIM(Replace(Replace(Replace(FIELD2,'\t',''),'\n',''),'\r',''));
等.
Trim()はすべての空白を削除するわけではないので、必要なすべての空白を置き換えてから削除する方がよいためです。
私の答えを共有するのに役立つことを願っています:)
このソリューションを使用する前に、ユースケースを理解してください。
選択クエリの実行中にトリムが機能しない
これは動作します
select replace(name , ' ','') from test;
これはしませんが
select trim(name) from test;
明確にするために、TRIMはデフォルトでスペースのみを削除します(すべての空白ではありません)。ドキュメントは次のとおりです。 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim
現在の回答では、実際には文字列の先頭と末尾から空白を100%削除することはできないようです。
他の投稿で述べたように、デフォルトの TRIM
はタブ、フォームフィードなどではなくスペースのみを削除します。他の空白文字を指定するTRIM
sの組み合わせは、限定的な改善を提供します。 TRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt)))))
。しかし、このアプローチの問題は、特定のTRIM
に指定できる文字が1つだけであり、それらの文字は開始と終了からのみ削除されることです。そのため、トリミングされる文字列が\t \t \t \t
(つまり、代替スペースとタブ文字)のようなものである場合、さらにTRIM
sが必要になります。一般的な場合、これは無期限に続く可能性があります。
軽量なソリューションの場合、単純なユーザー定義関数(UDF)を記述して、文字列の先頭と末尾の文字をループ処理することでジョブを実行できるようにする必要があります。しかし、私はそれをやるつもりはありません...かなり重い 正規表現の置き換え をすでに書いているので、これも仕事をすることができます-そして、説明されているように、他の理由で役に立つかもしれませんin このブログ投稿 。
デモ
Rextesterオンラインデモ 。特に、最後の行は失敗した他のメソッドを示していますが、正規表現メソッドは成功しています。
SQL(簡潔にするために機能コードを省略)
SELECT reg_replace(
reg_replace(txt,
'^[[:space:]]+',
'',
TRUE,
1,
0),
'[[:space:]]+$',
'',
TRUE,
1,
0) AS `trimmed txt`
FROM tbl;
このステートメントは、データベースのフィールドコンテンツを削除および更新します
フィールド値の左側の空白を削除するには
PDATEテーブルSET field1 = LTRIM(field1);
例UPDATEメンバーSET firstName = LTRIM(firstName);
フィールド値の右側の空白を削除するには
PDATEテーブルSETfield1 = RTRIM(field1);
例UPDATEメンバーSET firstName = RTRIM(firstName);
姓と名を持つ主キー列の値をトリムする必要があったため、すべての空白をトリムしたくないので、姓と名の間のスペースを削除しました。私のために働いたのは...
UPDATE `TABLE` SET `FIELD`= TRIM(FIELD);
または
UPDATE 'TABLE' SET 'FIELD' = RTRIM(FIELD);
または
UPDATE 'TABLE' SET 'FIELD' = LTRIM(FIELD);
FIELDの最初のインスタンスは単一引用符で囲まれていますが、2番目のインスタンスは引用符で囲まれていないことに注意してください。このようにしなければなりませんでした。または、引用符で囲まれたときに重複した主キーであるという構文エラーが発生しました。
選択クエリでトリムを使用する必要がある場合は、正規表現も使用できます
SELECT * FROM table_name WHERE field RLIKE ' * query-string *'
'query-string'のようなフィールドを持つ行を返します
ltrimまたはrtrimを使用して、右または左または文字列の空白を削除できます。