ExtractValue mysql XML返回空而不是NULL

时间:2014-06-24 17:42:49

标签: mysql xml null isnullorempty

我试图获取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&GT; \ S

mysql Ver 14.14使用readline 6.2为debian-linux-gnu(x86_64)分发5.5.37

连接ID:53 当前数据库: 当前用户:root @ localhost SSL:未使用 当前寻呼机:stdout 使用outfile:&#39;&#39; 使用分隔符:; 服务器版本:5.5.37-0 + wheezy1(Debian) 协议版本:10 连接:通过UNIX套接字的Localhost 服务器characterset:latin1 Db characterset:latin1 客户端字符集:utf8 Conn。characterset:utf8 UNIX套接字:/var/run/mysqld/mysqld.sock 正常运行时间:2小时21分33秒

主题:3个问题:3531慢查询:0打开:453刷新表:1打开表:每秒135个查询平均值:0.415

1 个答案:

答案 0 :(得分:0)

根据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值?

如果返回的(修剪过的)字符串的长度为零,那么您可以显式返回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删除。