MySQL解决抓取文章的html标签替换及其mysql函数的用法说明(一)
2014-11-24 13:59:15
·
作者:
·
浏览: 0
")
as x from CONTENT_TABLE c
where c.news_id in (select news_id from NEWS_TABLE where col_id = 66)
update CONTENT_TABLE c
set c.content = replace(c.content,SUBSTRING(c.content FROM POSITION("卡牌数值" IN c.content) FOR POSITION("-->" IN c.content)),"
")
where c.news_id in (select news_id from NEWS_TABLE where col_id = 66)
鉴于抓来的html结构比较乱比较复杂,也只能这样了。尽管效率一般,不过相关的文章不过几百篇,还可以接受的解决方法。关于其中涉及的SQL函数这里再重温学习一下:
一、MySQL中LOCATE和别名函数POSITION等
函数LOCATE(substr,str) 作用同POSITION(substr IN str)和INSTR(str,substr)
作用:返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0;LOCATE还有一种形式,包含三个参数:LOCATE(substr,str,pos) ,其返回子串 substr 在字符串 str 中的第 pos 位置后第一次出现的位置。INSTR(str,substr)和LOCATE()的双参数形式相同,只是参数顺序不一样而已。
mysql> SELECT LOCATE('bar', 'foobarbar');
-> 4
mysql> SELECT INSTR('foobarbar', 'bar');
-> 4
mysql> SELECT LOCATE('xbar', 'foobar');
-> 0
mysql> SELECT INSTR('xbar', 'foobar');
-> 0
mysql> SELECT LOCATE('bar', 'foobarbar', 7);
-> 7
这个函数是多字节安全的。在 MySQL 3.23 中,这个函数是字母大小写敏感的,当在 MySQL 4.0 中时,如有任一参数是一个二进制字符串,它才是字母大小写敏感的。
以下语句可以实现同样的查询功能:
SELECT `column` FROM `table` where `condition` like `%keyword%’
SELECT `column` from `table` where locate(‘keyword’, `condition`)>0
SELECT `column` from `table` where position(‘keyword’ IN `condition`)
SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0
速度上后三个比使用 like 稍快了一点点。
二、MySQL的REPLACE用法
用法一:函数REPLACE(str,from_str,to_str)
在字符串 str 中所有出现的字符串 from_str 均被 to_str替换,然后返回这个字符串:
mysql> select REPLACE('www.8783.com/a/detail_list/', 'a', 'list');
-> www.8783.com/list/detlistil_list/
例:把表table中的name字段中的 '斗三国'替换为“全民斗三国”
mysql> update table set name=replace(name,'斗三国','全民斗三国')
这个函数也是多字节安全的。
用法二:REPLACE INTO
在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。包括我在内的程序猿们常见的做法有三种:
第一种:MySQL很常见的一种做法,许多新手、甚至许多资深的高级coder也有这么写的,会在代码中封装三个函数,一个函数查询记录是否存在,一个函数实现直接插入,另一个函数对已有记录进行更新。在不同的情况进行调用。这种方法多次excute执行数据操作,势必造成比较大的开销。
第二种:用一条SQL代替三种情况的封装,来实现按需操作,或插入新记录,或更新旧数据。SQL Server中的语句如下:
IF NOT EXISTS(select 1 from NEWS_bak where news_id = 1008)
insert into NEWS_bak(title, keyword, description) values('孙权', '三国','孙权-吴国老大')
else
update NEWS_bak set title = "孙权"and keyword='三国' and description='孙权-吴国老大' where news_id = 1008
说明:对于IF NOT EXISTS的相同表达,MySQL一般用作条件WHERE NOT EXISTS();由于exists(SELECT NULL )也会返回true,故select exists(SELECT NULL )的结果为1。
但是在MySQL 中如何实现此逻辑呢?方法有,且语法更简洁――replace into 。
MySQL replace into 有三种形式:
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ..