2

このクエリで

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

どちらも機能しません。


疑問が残ります:

  1. 必要に応じて TRIM が機能するように言う TRIM オプションまたは postgresql 構成はありませんか?

  2. normalize-space()xpathで使用できますか? どのように?

  3. PostgreSQL 9.1 を使用していますが、アップグレードする必要がありますか?

4

1 に答える 1