0

NULL 値を取得しようとしましたが、出力は常に空です。mysql 構成に関するものかどうかはわかりません。

クエリ;

mysql> SELECT ExtractValue('
  <?xml version="1.0" encoding="UTF-8"?>
    <lista>
      <socios>
         <inscripcion xsi:nil="true"></inscripcion>
      </socios>
    </lista>','lista/socios/inscripcion') as value;
+-------+
| value |
+-------+
|       |
+-------+
1 row in set (0.00 sec)


mysql> SELECT ExtractValue('
<?xml version="1.0" encoding="UTF-8"?>
  <lista>
    <socios>
      <inscripcion xsi:nil="true" />
    </socios>
  </lista>','lista/socios/inscripcion') as value;
+-------+
| value |
+-------+
|       |
+-------+
1 row in set (0.00 sec)

mysql> \s

mysql Ver 14.14 Distrib 5.5.37、readline 6.2 を使用する debian-linux-gnu (x86_64) 用

接続 ID: 53 現在のデータベース: 現在のユーザー: root@localhost SSL: 使用されていません 現在のページャー: stdout Outfile の使用: '' デリミタの使用: ; サーバーのバージョン: 5.5.37-0+wheezy1 (Debian) プロトコルのバージョン: 10 接続: UNIX ソケット経由のローカルホスト サーバーの文字セット: latin1 データベースの文字セット: latin1 クライアントの文字セット: utf8 接続の文字セット: utf8 UNIX ソケット: /var/run/mysqld/ mysqld.sock アップタイム: 2 時間 21 分 33 秒

スレッド: 3 質問: 3531 遅いクエリ: 0 開く: 453 テーブルをフラッシュする: 1 テーブルを開く: 135 1 秒あたりの平均クエリ数: 0.415

4

1 に答える 1

1

ごとにMySQL XML Functions Documentation

text()何らかの理由で式 (暗黙の / を含む) に一致するテキスト ノードが見つからない場合、xpath_exprが有効であり、xml_frag適切にネストされて閉じられた要素で構成されている限り、空の文字列が返されます。空の要素での一致とまったく一致しないことは区別されません。これは仕様によるものです。

ただし、以下を使用して、実際に一致する要素があったかどうかを判断できます。

SELECT ExtractValue('
  <?xml version="1.0" encoding="UTF-8"?>
    <lista>
      <socios>
         <inscripcion xsi:nil="true"></inscripcion>
      </socios>
    </lista>', 'count(lista/socios/inscripcion)') as value;

出力は次のようになります。

+-------+
| value |
+-------+
| 1     |
+-------+

編集1

同じ出力が得られましたが、まったく得られません。NULL 値を強制的に取得するにはどうすればよいですか?

返された (トリミングされた) 文字列の長さが 0 の場合、明示的に a を返すことができますNULL

SELECT if( length( trim( @v:=ExtractValue( '
  <?xml version="1.0" encoding="UTF-8"?>
    <lista>
      <socios>
         <inscripcion xsi:nil="true">  </inscripcion>
      </socios>
    </lista>', '/lista/socios/inscripcion' ) ) ) = 0, NULL, @v ) as value;

+-------+
| value |
+-------+
| NULL  |
+-------+

trimスペースのみの文字列を返す場合は、使用して削除できます。

于 2014-06-24T18:01:07.800 に答える