我有点有问题的提取值函数在MySQL中。
下面是我的示例XML:
<As>
<A>
<B>Chan</B>
</A>
<A>
<B>Shey</B>
</A>
<A>
<B>Bob</B>
</A>
</As>
下面是我当前的查询:
SELECT ExtractValue(@XML, '/As/A/B')
结果如下:
CHAN SHEY BOB
这是我想要的
CHAN
SHEY
BOB
有没有人能帮我实现这一点...谢谢。
4条答案
按热度按时间xiozqbni1#
这个问题在这里得到了解答:
Parse an XML string in MySQL
如果您将child更改为“B”,则该文章中的解决方案应该有效:
dgtucam12#
您的问题的解决方案需要使用
numbers
表:整数表,1,2,3,......直到某个合理的值,比如1024。然后,您将使用String Walking来解决该问题。
下面是
numbers
表的CREATE TABLE语句:上述内容使用值1..1024填充
现在查询:
我们使用
ExtractValue(@XML, 'count(/As/A/B)')
得到值3--匹配的XML元素的数量。遍历数字1、2、3,我们从文本
CHAN SHEY BOB
中提取标记#1、标记#2、标记#3,并按空格进行拆分。注:
祝你好运!
mjqavswn3#
响应表:
来源:http://pinaki-mukherjee.blogspot.in/2014/07/mysql-xml-querying.html
56lgkhnf4#
您可能需要重新考虑数据库设计。关系数据库系统的构建并不支持一个字段中的多个值。ExtractValue是一个过滤器,用于从字段中的XML数据中获取 * 一个 * 值,而不是获取多行数据。
你应该仔细阅读数据库规范化。所有的表都应该至少遵守第一范式(1NF),也就是说,每个字段只有一个值。不满足1NF的表通常很难查询,因为一般的SQL,特别是像MySQL这样的实现,没有给你提供任何好的查询工具。
如果您仍然想沿着非1NF表,我认为您可能需要从数据库中提取数据,然后在应用程序代码中执行这些工作。