我有一个SQL表,其中的列包含XML。它不是很漂亮,但是它是项目的一部分,并且可以更改。
现在,我需要从此XML的特定元素中提取一个值。值是联邦制国家,所以值的长度是可变的,这意味着
SUBSTRING ( expression ,start , length )
不是一种选择,因为我不能说我的价值将持续多久。
是否有一个允许在两个表达式之间进行搜索的功能,例如
FOO ('state>', '</state')
或该方向的任何东西?
编辑:
我正在使用MySQL 5.6
示例:
<root>
<person>
<name>Michael</name>
<state>Berlin</state>
</person>
</root>
我的输出应该是
Berlin
另一个人的状态可能不同,因此值的长度并不总是相同。
感谢您的时间。
答案 0 :(得分:0)
INSTR(str,pattern)
是解决方案
和我用来在字符串中选择值的脚本看起来像这样
SELECT ID, substring(
xml,
instr(xml, "<state>") + 23,
(instr(xml, "</state>") - (instr(xml, "<state>") + 23))
) AS STATE
FROM tablexml
WHERE xml
LIKE '%value%';
答案 1 :(得分:0)
您可以使用substring_index()
:
select substring_index(substring_index(expression, '<state'>, 2), '</state>', -1) as state
from t;