2010-12-28 2 views

答えて

2
CREATE TABLE test (x text); 
INSERT INTO test VALUES (E'abc'); 
INSERT INTO test VALUES (E'foo\u200C'); -- U+200C = ZERO WIDTH NON-JOINER 
SELECT x, octet_length(x) FROM test; 
    x │ octet_length 
─────┼────────────── 
abc │   3 
foo │   6 
(2 rows) 

CREATE TABLE test2 AS SELECT replace(x, E'\u200C', '') AS x FROM test; 
SELECT x, octet_length(x) FROM test2; 
    x │ octet_length 
─────┼────────────── 
abc │   3 
foo │   3 
(2 rows) 
+0

これは私が探していてうまくいくものです。 – kiranking

0

あなたはreplace(your_column, 'Zwnj','')の代わりに、トリム()は動作しません@ahwnn

+0

を使用する必要があります。私はreplace(kan_text、 'zwnj'、 '')、replace(kan_text、 '&Zwnj'、 '')を試しました。クエリが実行されると、最後にパイプ記号のような文字が表示されます。 – kiranking

+0

あなたが私たちに与えた例はzwnjでした(私はそれが何であるべきか分かりません)。もちろん、置き換えたい実際の文字で置き換える必要があります。 –

+0

@kiranking:エスケープされた文字列リテラルを書いて、バックスラッシュのエスケープシーケンスの16進数またはUnicodeを使って文字を表すことができます。 'replace(your_column、E '\ u9876'、 '')'(Unicodeリテラルで '9876'を置き換える)のようなものです。 http://www.postgresql.org/docs/9.1/static/sql-syntax-lexical.html#SQL-BACKSLASH-TABLE – kgrittn

関連する問題