sql >> データベース >  >> RDS >> Oracle

OracleクエリでXMLTypeノードを連結します

    concat() SQL関数は2つの値を連結するため、抽出された各値に個別にセミコロンを追加するだけです。しかし、あなたは実際に結果の文字列集約を行おうとしています(おそらく、実際には2つ以上の抽出された値である可能性があります)。

    抽出の代わりにXMLQueryを使用し、XPath string-join()を使用できます。 連結を行う関数:

    XMLQuery('string-join(/A/B, ";")' passing xmltype(a.xml) returning content)
    

    固定されたXMlエンドノードタグを使用したデモ:

    -- CTE for sample data
    with a (xml) as (
      select '<A><B>123</B><C>456</C><B>789</B></A>' from dual
    )
    -- actual query
    select XMLQuery('string-join(/A/B, ";")' passing xmltype(a.xml) returning content) as result
    from a;
    
    RESULT
    ------------------------------
    123;789
    

    個々の<B>をすべて抽出することもできます XMLTableを使用して値を取得し、SQLレベルの集計を使用します。

    -- CTE for sample data
    with a (xml) as (
      select '<A><B>123</B><C>456</C><B>789</B></A>' from dual
    )
    -- actual query
    select listagg(x.b, ';') within group (order by null) as result
    from a
    cross join XMLTable('/A/B' passing xmltype(a.xml) columns b number path '.') x;
    
    RESULT
    ------------------------------
    123;789
    

    これにより、柔軟性が高まり、他のノード値によるグループ化が容易になりますが、例の値に基づくと、ここでは必要ないようです。




    1. Ruby on Rails:データベースからアイテムをプルして、指定された順序で返す方法はありますか?

    2. ResultSetを返す

    3. phpMyAdminでUTF-8文字を表示するにはどうすればよいですか?

    4. MariaDBの日付から年を返す4つの関数