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

MariaDBでEXTRACTVALUE()がどのように機能するか

    MariaDBでは、EXTRACTVALUE() XMLフラグメントからCDATAを返す組み込みの文字列関数です。

    それが機能する方法は、2つの文字列引数を受け入れることです:XMLマークアップのフラグメントとXPath式(つまり、ロケーター)。 EXTRACTVALUE() 次に、XPath式に一致する1つまたは複数の要素の子である最初のテキストノードのCDATA(つまりテキスト)を返します。

    構文

    構文は次のようになります:

    EXTRACTVALUE(xml_frag, xpath_expr)

    xml_fragの場所 はXMLフラグメントであり、xpath_expr 一致するXPath式です。

    基本的な例は次のとおりです。

    SELECT EXTRACTVALUE('<type>Cat</type>', '/type') AS "Result";

    結果:

    +--------+
    | Result |
    +--------+
    | Cat    |
    +--------+

    この場合、XPathは/typeです。 、したがって、typeからCDATA(テキスト)を返します。 要素。

    もう1つあります:

    SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user') AS "Result";

    結果:

    +--------+
    | Result |
    +--------+
    | Homer  |
    +--------+

    この場合、XPathは/userです。 、などEXTRACTVALUE() userからCDATAを返します 要素。

    iqが返されないことに注意してください 要素またはそのテキスト。 EXTRACTVALUE()であるため、これは予想されることです。 CDATAのみを返します。子要素や子要素に含まれる可能性のあるテキストは返されません。

    text()式の使用

    これは、明示的なtext()を追加して一致を取得するのと同じです。 式:

    SELECT EXTRACTVALUE('<type>Cat</type>', '/type/text()') AS "Result";

    結果:

    +--------+
    | Result |
    +--------+
    | Cat    |
    +--------+

    ネストされた要素

    ネストされた要素からCDATAを取得する例を次に示します。

    SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/user/iq') AS "Result";

    結果:

    +--------+
    | Result |
    +--------+
    | Low    |
    +--------+

    ここでは、iqからCDATAを取得しました user内にネストされている要素 エレメント。これは、/user/iqを使用して実現しました。 XPathとして。

    一致なし

    そのような要素が存在しない場合、何も返されません。

    例:

    SELECT EXTRACTVALUE('<type>Cat</type>', '/name') AS "Result";

    結果:

    +--------+
    | Result |
    +--------+
    |        |
    +--------+

    これは、ネストを間違えた場合にも当てはまります。

    例:

    SELECT EXTRACTVALUE('<user>Homer<iq>Low</iq></user>', '/iq') AS "Result";

    結果:

    +--------+
    | Result |
    +--------+
    |        |
    +--------+

    ここでは、/iqを使用しました /user/iqを使用する必要がある場合のXPathとして 。

    空のXML

    空のXMLドキュメントは、空の結果を生成します:

    SELECT EXTRACTVALUE('', '/name') AS "Result";

    結果:

    +--------+
    | Result |
    +--------+
    |        |
    +--------+

    空のXPath

    空のXPathはエラーを返します:

    SELECT EXTRACTVALUE('<type>Cat</type>', '');

    結果:

    ERROR 1105 (HY000): XPATH syntax error: ''

    ヌルXML

    nullを提供する 最初の引数がエラーになるため:

    SELECT EXTRACTVALUE(null, '');

    結果:

    ERROR 1105 (HY000): XPATH syntax error: ''

    Null XPath

    nullを提供する 2番目の引数がnullを返すため :

    SELECT EXTRACTVALUE('<type>Cat</type>', null) AS "Result";

    結果:

    +--------+
    | Result |
    +--------+
    | NULL   |
    +--------+

    引数を1つだけ提供する

    引数を1つ指定すると、エラーが発生します:

    SELECT EXTRACTVALUE('<type>Cat</type>');

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'

    引数がありません

    EXTRACTVALUE()を呼び出す 引数を渡さないとエラーが発生します:

    SELECT EXTRACTVALUE();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXTRACTVALUE'

    XMLの概要

    XMLの詳細については、Quackitにある私のXMLチュートリアルを参照してください。このチュートリアルには、XPathの概要も含まれています。


    1. MySQLのSELECTステートメントを使用してテーブル名を取得する

    2. SQLiteの日付に日を追加

    3. PDOを使用した単一行、単一列のフェッチ

    4. Oracle MySQL、Percona Server、MariaDBの比較