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 に答える