我需要帮助形成MYSQL查询从表一列具有以下内容
Row1 : this is first <a href='mytext.txt'>row</a> from the table
Row 2 : THis is the second row <img src ='mytext.jpg'> my image is there
Row 3 : <p>This is the Third row my mytext is there </p>
Row 4 : <p class='te_mytext'>This is the Third row my text is there </p>
这是我试图搜索关键字'mytext‘的表行
我的问题是
SELECT * from table WHERE colmn_name ` like '%mytext%' "
我会得到所有的4行作为结果,但结果是错误的。我需要获得正确的输出,因为只有第3行。原因是此行仅在内容中包含mytext所有其他内容不在内容中,而在所有行中具有mytext
如何编写MySQL查询?
发布于 2010-06-07 22:40:23
尝试这个解决方案:我自己没有试过,但显然是有效的。
来源:http://forums.mysql.com/read.php?52,177343,177985#msg-177985
SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )
RETURNS varchar(4000)
DETERMINISTIC
BEGIN
DECLARE iStart, iEnd, iLength int;
WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
BEGIN
SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
SET iLength = ( iEnd - iStart) + 1;
IF iLength > 0 THEN
BEGIN
SET Dirty = Insert( Dirty, iStart, iLength, '');
END;
END IF;
END;
END WHILE;
RETURN Dirty;
END;
|
DELIMITER ;
SELECT fnStripTags('this <html>is <b>a test</b>, nothing more</html>');
发布于 2012-11-13 00:18:38
下面是我的strip_tags函数的实现:
CREATE FUNCTION `strip_tags`($str text) RETURNS text
BEGIN
DECLARE $start, $end INT DEFAULT 1;
LOOP
SET $start = LOCATE("<", $str, $start);
IF (!$start) THEN RETURN $str; END IF;
SET $end = LOCATE(">", $str, $start);
IF (!$end) THEN SET $end = $start; END IF;
SET $str = INSERT($str, $start, $end - $start + 1, "");
END LOOP;
END;
我确保它删除了不匹配的左括号,因为它们是危险的,尽管它忽略了任何不成对的右括号,因为它们是无害的。
mysql> select strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.');
+----------------------------------------------------------------------+
| strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.') |
+----------------------------------------------------------------------+
| hello world again. |
+----------------------------------------------------------------------+
1 row in set
好好享受吧。
发布于 2012-03-10 15:57:41
如果您的内容总是以标签(等)开头
试试这个:
SELECT * from table WHERE colmn_name REGEXP '>[^<]*mytext';
https://stackoverflow.com/questions/2627940
复制相似问题