このクエリで
SELECT trim(title) FROM (
SELECT
unnest( xpath('//p[@class="secTitle1"]', xmlText )::varchar[] ) AS title
FROM t1
) as t2
行とスペースを含む XML 入力テキスト、
<root>
...
<p class="x">
text text
text text
</p><p> ...</p>
...
</root>
効果はtrim()
ありません (!)。それはPostgreSQLのバグですか?fn:normalize-space()
XPathを使用して適用するにはどうすればよいですか? 「WHERE title is not null」のようなものが必要ですか? (Oracle の方が簡単です...) PostreSQL でこの単純なクエリを実行するにはどうすればよいですか?
回避策
回避策ではなく、適切に構成された組み込み関数が必要です...しかし、作業して結果を表示する必要があるため、正規表現を使用しています...
SELECT id, TRIM(regexp_replace(tit, E'[\\n\\r\\t ]+', ' ', 'g')) AS tit
FROM (
SELECT
id, -- xpath returns array of 1, 2, or more strings
unnest( xpath('//p[@class="secTitle1"]', texto )::VARCHAR[] ) AS tit
FROM t
) AS tmp
したがって、「単純なスペースのトリムのみ」は友好的ではなく、util (!) ではありません。
@muコメントの後に編集
私は試します
SELECT id, TRIM(tit, E'\\n\\r\\t') AS tit
と
SELECT id, TRIM(tit, '\n\r\t') AS tit
どちらも機能しません。
疑問が残ります:
必要に応じて TRIM が機能するように言う TRIM オプションまたは postgresql 構成はありませんか?
normalize-space()
xpathで使用できますか? どのように?PostgreSQL 9.1 を使用していますが、アップグレードする必要がありますか?