首页 > 解决方案 > 从 SQL 中的字符串中提取值

问题描述

我有一个包含 XML 列的 SQL 表。它不漂亮,但它是项目的一部分,并且是可变的。

现在我需要从这个 XML 的特定元素中提取一个值。value 是一个联邦状态,所以 value 的长度是可变的,什么意思

SUBSTRING ( expression ,start , length )

不是一种选择,因为我不能说我的价值会持续多久。

是否有允许在两个表达式之间进行搜索的函数,例如

FOO ('state>', '</state') 

或者那个方向的任何东西?

编辑:

我正在使用 MySQL 5.6

例子:

<root>
  <person>
    <name>Michael</name>
    <state>Berlin</state>
  </person>
</root>

我的输出应该是

Berlin

不同的人可以有不同的状态,因此价值的长度并不总是相同的。

谢谢你的时间。

标签: mysqlsqlxmlstringmysql-5.6

解决方案


INSTR(字符串,模式)

是解决方案

我在字符串中选择值的脚本如下所示

SELECT ID, substring(
xml,
instr(xml, "<state>") + 23,
(instr(xml, "</state>") - (instr(xml, "<state>") + 23))
) AS STATE
FROM tablexml 
WHERE xml
LIKE '%value%';

推荐阅读