1

当我做

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>

4

3 回答 3

5

正则表达式可能不是您想要的。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 |
+------+------+------+------+---------+
于 2012-06-26T17:08:20.510 回答
3

不,不使用正则表达式。Mysql 不支持基于正则表达式的替换或组匹配等。

唯一的正则表达式支持是RLIKEor REGEXP(它们是同义词),用于匹配列值。

于 2012-06-26T17:08:39.897 回答
3

不,但如果你愿意,你可以做一些像这样的黑客行为(请原谅长线):

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%';
于 2012-06-26T17:09:23.767 回答