当我做
SELECT resrev_meta FROM resourcerevs WHERE resrev_meta LIKE '%attr%';
我得到这样的结果
<attr><fileid>131</fileid></attr>
<attr><fileid>326</fileid><width>360</width><height>640</height></attr>
问题
是否有可能有一个只输出和之间的数字的正则<fileid>表达式</fileid>?
正则表达式可能不是您想要的。mysql 支持 xpath 表达式。
这应该给你你需要的东西:
SELECT ExtractValue(resrev_meta,'//fileid') AS fileid
FROM resourcerevs
WHERE resrev_meta LIKE '%attr%';
http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue
mysql> SELECT
-> ExtractValue('<a>ccc<b>ddd</b></a>', '/a') AS val1,
-> ExtractValue('<a>ccc<b>ddd</b></a>', '/a/b') AS val2,
-> ExtractValue('<a>ccc<b>ddd</b></a>', '//b') AS val3,
-> ExtractValue('<a>ccc<b>ddd</b></a>', '/b') AS val4,
-> ExtractValue('<a>ccc<b>ddd</b><b>eee</b></a>', '//b') AS val5;
+------+------+------+------+---------+
| val1 | val2 | val3 | val4 | val5 |
+------+------+------+------+---------+
| ccc | ddd | ddd | | ddd eee |
+------+------+------+------+---------+
不,但如果你愿意,你可以做一些像这样的黑客行为(请原谅长线):
SELECT
SUBSTRING(
resrev_meta,
INSTR(resrev_meta, '<fileid>') + LENGTH('<fileid>'),
INSTR(resrev_meta, '</fileid>') - INSTR(resrev_meta, '<fileid>') - LENGTH('<fileid>')) AS fileid
FROM resourcerevs WHERE resrev_meta LIKE '%attr%';