文字列の最初または最後に空白とタブの両方が含まれている文字列列をクリーンアップする必要があります(これは混乱です!)。各Wordの間に空白を1つだけ保持したい。考えられるすべての状況を含む次の文字列があるとします。
mystring = ' one two three four '
ここに私がそれをする方法があります:
WITH
t1 AS (SELECT' one two three four '::TEXT AS mystring),
t2 AS (SELECT TRIM(both ' ' from mystring) AS mystring FROM t1),
t3 AS (SELECT TRIM(both '\t' from mystring) AS mystring FROM t2)
SELECT regexp_replace(mystring, '(( ){2,}|\t+)', ' ', 'g') FROM t3 ;
私は最終的に次の文字列を取得します。これは見た目はいいですが、末尾に空白があります...
'one two three four '
より簡単な方法でそれを行い、この最後の問題を解決することについてのアイデアはありますか?
どうもありがとう !
SELECT trim(regexp_replace(col_name, '\s+', ' ', 'g')) as col_name FROM table_name;
またはアップデートの場合:
UPDATE table_name SET col_name = trim(regexp_replace(col_name, '\s+', ' ', 'g'));
SELECT trim(regexp_replace(mystring, '\s+', ' ', 'g')) as mystring FROM t1;
コメントを見ない人のために回答を投稿する。
'\s+'
を使用
'\\s+'
ではない
私のために働いた。
trim
とregexp_replace
では、うまくいきませんでした。だから私は別の解決策を思いついた:
SELECT trim(
array_to_string(
regexp_split_to_array(' test with many spaces for this test ', E'\\s+')
, ' ')
) as mystring;
最初のregexp_split_to_array
は、最初と最後に「空白」を残してすべてのスペースを削除します。
-- regexp_split_to_array output:
-- {"",test,with,many,spaces,for,this,test,""}
using array_to_string
すべての「、」がスペースになる場合
-- regexp_split_to_array output ( '_' instead of spaces for viewing ):
-- _test_with_many_spaces_for_this_test_
トリムは頭と尾を削除することです
-- trim output ( '_' instead of spaces for viewing ):
-- test_with_many_spaces_for_this_test