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

MySQLXMLクエリ

    問題を解決するには、numbersを使用する必要があります table:整数のテーブル、1、2、3、....妥当な値、たとえば1024まで。

    次に、文字列ウォーキング を使用します。 問題を解決するために。

    numbersのCREATETABLEステートメントは次のとおりです。 テーブル:

    CREATE TABLE numbers (
      `n` smallint unsigned NOT NULL AUTO_INCREMENT,
      PRIMARY KEY (`n`)
    )
    ;
    INSERT INTO numbers VALUES (NULL);
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    INSERT INTO numbers SELECT NULL FROM numbers;
    

    上記には値1..1024

    が入力されます

    そして今、クエリ:

    SELECT 
      SUBSTRING_INDEX(SUBSTRING_INDEX(ExtractValue(@XML, '/As/A/B'), ' ', n), ' ', -1) AS value
    FROM
      numbers
    WHERE
      n BETWEEN 1 AND ExtractValue(@XML, 'count(/As/A/B)')
    ;
    
    
    +-------+
    | value |
    +-------+
    | Chan  |
    | Shey  |
    | Bob   |
    +-------+
    3 rows in set (0.02 sec)
    

    ExtractValue(@XML, 'count(/As/A/B)')を使用します 値を取得するには3 -一致するXML要素の数。

    番号1、2、3を実行して、テキストCHAN SHEY BOBからトークン#1、トークン#2、トークン#3を抽出します。 、スペースで分割します。

    注:

    • ExtractXMLは、スペースで区切られた値を返します。ただし、返されたテキスト内にスペースがある場合は、問題ありません。区切りスペースと見分けがつかないでしょう。

    • 数値テーブルとその場で番号を生成する 。私は反対することをお勧めします-それは多くのオーバーヘッドを生み出すでしょう。 1024行の数値テーブルがあると、いつでも便利です。

    頑張ってください!



    1. mysqliまたはPDO-長所と短所は何ですか?

    2. ネストされたコメントシステムを実装する方法は?

    3. PDOでmysql_data_seekをどのように使用しますか?

    4. ORA-00979はgroupby式ではありません