0

一个 mysql 表在名为“body”的文本类型字段中包含超过 74000 个条目。

我需要一个仅包含包含 HTML 标记的行的视图。

例子:

记录 1 =>

Lorem ipsum dolor sit amet, <a href="http://foo.bar">consetetur</a> sadipscing elitr\n
sed diam nonumy eirmod temporary invidunt ut labore et dolore\n
<hr>
aliquyam magna erat, sed diam voluptua.

记录 2 =>

At vero eos et <strong>accusam</strong> et justo duo dolores et ea rebum.\n
Stet clita kasd gubergren, No sea takimata sanctus est Lorem\n
ipsum dolor sit amet.

记录 = 3>

Lorem ipsum dolor sit amet, consetetur sadipscing elitr\n
<ul><li>sed</li> <li>diam</li></ul> nonumy eirmod temporary invidunt ut labore et dolore\n
aliquyam magna erat, sed diam voluptua.

输出应仅包含带有 HTML 标记的行:

记录 1 =>

Lorem ipsum dolor sit amet, <a href="http://foo.bar">consetetur</ a> sadipscing elitr\n

记录 2 =>

At vero eos et <strong>accusam</strong> et justo duo dolores et ea rebum.\n

记录 3 =>

<ul><li>sed</li> <li>diam</li></ul> nonumy eirmod temporary invidunt ut labore et dolore\n

我需要通过脚本运行手动查看输出。

有没有人对相应的 sql select 语句有想法,例如

SELECT `body` FROM `messages` WHERE `body` REGEXP -> `<regexp_for_html-tags_here>`;

或类似的东西。

问候

4

1 回答 1

0

如果你想使用正则表达式,你可以这样做:

SELECT body 
FROM messages 
WHERE body REGEXP '.*<[:alpha:][:alnum:]*.*>.*';

编辑

在评论中,一些人提到了性能。您可以使用 LIKE 和 REGEXP 的组合来提高性能 - 即 like 语句会将数据缩小到感兴趣的行,然后 REGEXP 可以优化搜索(例如,避免出现这些字符但不是潜在标签的问题名称)。

SELECT body 
FROM messages 
WHERE body like '%<%>%' 
and body REGEXP '.*<[:alpha:][:alnum:]*.*>.*';

http://sqlfiddle.com/#!2/70c47/2

于 2013-10-01T22:34:08.417 回答