有一表字段(good_info)值是这样的:<p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>想用SQL语句查询出前面2个包含在 p 标签里面的值,并且去掉<p></p>这样的标签,
最后字段查询的结果这样:内容一内容二一
----
使用的是mysql数据库,在p标签中的值有长有短,判断“p>” 这样的前四个。
不知有没说清楚。
原先字段中的值是:<p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>
希望得到后的值是:内容一内容二一
  多谢大家指点。。

解决方案 »

  1.   

    declare @str varchar(1000)
    set @str=':<p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>'
    select replace(replace(@str,'<p>','','</p>','')
      

  2.   

    不好意思,是我没说太清楚。字段(good_id)                  字段(good_info)    1                  <p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>    2                  <p>test1</p><p>test内容12</p><p>WOW163</p><p>testtet</p>    3                  <p>20100831</p><p>20100831</</p><p>20100831</</p><p>20100831</</p>    4                  <p>WLK</p><p>WLK80</p><p>WLKlr</p><p>WLK</p>    5                  <p>DKDK</p><p>mianfeng</p><p>内容三二一</p><p>内容四一</p>是这样,要得到所有字段的前两个<p></p> 标签中的值。。
    抱歉,没说清楚。
      

  3.   

    declare @s varchar(1000)
    set @s='<p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>'
    select cast(@s as xml).value('.','varchar(20)')
    /*--------------------
    内容一内容二一内容三(1 行受影响)
    */
      

  4.   

    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    create table [tb]([id] int,[info] varchar(66))
    insert [tb]
    select 1,'<p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>' union all
    select 2,'<p>test1</p><p>test内容12</p><p>WOW163</p><p>testtet</p>' union all
    select 3,'<p>20100831</p><p>20100831</p><p>20100831</p><p>20100831</p>' union all
    select 4,'<p>WLK</p><p>WLK80</p><p>WLKlr</p><p>WLK</p>' union all
    select 5,'<p>DKDK</p><p>mianfeng</p><p>内容三二一</p><p>内容四一</p>'--2005
    select id,cast(left([info],charindex('</p>',[info],charindex('</p>',[info],1)+1)+3) as xml).value('.','varchar(100)') from [tb]
    --2000
    select id,replace(replace(left([info],charindex('</p>',[info],charindex('</p>',[info],1)+1)+3) ,'<p>',''),'</p>','') from [tb]
      

  5.   

    set @x = '<p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>';
    select extractvalue(@x,'//p[position()<=2]');
      

  6.   

    Navicat for MySQL   8.0版本的。
    #1305 - FUNCTION tab.extractvalue does not exist截取到第四个" p> " 符号然后去掉,不知这样想法可以吗。
      

  7.   

    replace(good_info,'</p>','');可以这样去除符号,怎么截取到第四个 p>  呢。字段(good_id) 字段(good_info)  1 <p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>  2 <p>test1</p><p>test内容12</p><p>WOW163</p><p>testtet</p>
    现在想法是这样,查找并截取到第四个 “p>” 再把值里面的不需要的符号用replace去除。
      

  8.   

    谢谢大家的帮助,昨天已找到答案。select substr(goods_desc,1,instr(goods_desc,'/p>')+4+instr(substr(goods_desc,instr(goods_desc,'/p>')+4),'/p>')+1) from good现在我需要把得到的这个字段,复制到另个字段 goods_name 上。
    如上语句,我从字段goods_desc中的值是原先字段中的值是:<p>内容一</p><p>内容二一</p><p>内容三二一</p><p>内容四一</p>
    现在得到后的值是:内容一内容二一现在我想把这个值移到 goods_name字段中。
    mysql中的update 语句:
    update good set goods_name =(select substr(goods_desc,1,instr(goods_desc,'/p>')+4+instr(substr(goods_desc,instr(goods_desc,'/p>')+4),'/p>')+1) from good) where goods_id=goods_id;报错:you can't specify target table 'good' from update in from clause.
    大意是说,不能在表 good 更新子句。以前没有这样进行修改过,希望大家指点一下,多谢。
      

  9.   

    解决了,可以这样,先把要修改的字段(goods_desc)的值全部复制到字段(goods_name)然后再执行语句。
    update good set goods_name = substr(goods_desc,1,instr(goods_desc,'/p>')+4+instr(substr(goods_desc,instr(goods_desc,'/p>')+4),'/p>')+1) 这样得到的值,再
    update good set goods_name = replace(goods_name,'</p>','');
    update good set goods_name = replace(goods_name,'<p>','');
    这样去除 p 标签。
    语句还是太多不熟悉,这样写也是比较没效率的,我想应该还会有更好的方法解决他。。
    总之多谢大家的提示与帮忙了,谢谢。