ExtractValue mysql XML 返回空而不是 NULL
Posted
技术标签:
【中文标题】ExtractValue mysql XML 返回空而不是 NULL【英文标题】:ExtractValue mysql XML return empty instead of NULL 【发布时间】:2014-08-15 02:16:23 【问题描述】:我试图得到一个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:未使用 当前寻呼机:标准输出 使用输出文件:'' 使用分隔符:; 服务器版本:5.5.37-0+wheezy1 (Debian) 协议版本:10 连接:通过 UNIX 套接字的 localhost 服务器字符集:latin1 Db 字符集:latin1 客户端字符集:utf8 康涅狄格字符集:utf8 UNIX 套接字:/var/run/mysqld/mysqld.sock 正常运行时间:2 小时 21 分 33 秒
线程:3 问题:3531 慢查询:0 打开:453 刷新表:1 打开表:135 每秒查询平均:0.415
【问题讨论】:
得到了相同的输出,我完全不明白。 我应该如何强制获取 NULL 值? 【参考方案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 值?
如果返回的(修剪后的)字符串长度为零,则可以显式返回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
删除。
【讨论】:
谢谢,它有效,但我试图以另一种方式做,根据你的回答,我有相同的输出code
SELECT if( length( @v:=ExtractValue( 'code
以上是关于ExtractValue mysql XML 返回空而不是 NULL的主要内容,如果未能解决你的问题,请参考以下文章
MySQL注入 | updatexml和extractvalue函数