不很明白:
content的设计好象不太规范?

解决方案 »

  1.   

    content字段类容是‘内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>’吗
      

  2.   

    就是想要分解一个字符串,这哪里SQL的题目啊,:)
      

  3.   

    什么意思啊JBXX是什么,可以将清楚点吗
      

  4.   

    那么用Copy(S; Index, Count: Integer)吧
      

  5.   

    content字段类容是‘内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>’
    数据库一开始并不是我设计的,设计这的人已经走掉了。剩余的工作要我接着做,真是太烦了。要改变库结构,时间紧啊!来不及了。所以请各位看看能否实现。
    谢谢!
      

  6.   

    Declare @Content varChar(500),@Nk VarChar(50),
            @Crb varChar(50),@Bd varChar(50),@Gm varChar(50)
    Select @Content=Content From jbxx
      Set @Nk=SubString(@Content,Charindex(':',@Content),
                                  @Content,Charindex('<BR>',@Content))
      Set @Content=STUFF(@Content,Charindex(':',@Content),
                                  @Content,Charindex('<BR>',@Content))
      Set @Crb=SubString(@Content,Charindex(':',@Content),
                                  @Content,Charindex('<BR>',@Content))
      Set @Content=STUFF(@Content,Charindex(':',@Content),
                                  @Content,Charindex('<BR>',@Content))
      Set @Bd=SubString(@Content,Charindex(':',@Content),
                                  @Content,Charindex('<BR>',@Content))
      Set @Content=STUFF(@Content,Charindex(':',@Content),
                                  @Content,Charindex('<BR>',@Content))
      Set @Gm=SubString(@Content,Charindex(':',@Content),
                                  @Content,Charindex('<BR>',@Content))
     print @Nk+@crb+@bd+@Gm
     
      

  7.   

    wdsimon(渴望成为高手▲▲▲▲▲) :
    jbxx是表名,其中包含content字段用Copy(S; Index, Count: Integer) 好象不行吧!因为content字段是的内容长度是变化的。
      

  8.   

    谢谢各位的关注!'总科类名:内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>' 是content字段的内容!
      

  9.   

    try:
    --创建字符串替换函数
    create function fgetstr(@str varchar(1000))
    returns varchar(1000)
    as
    begin
    set @str=replace(@str,'<BR>分科类名:',',')
    set @str=replace(@str,'<BR>病名:',',')
    set @str=replace(@str,'<BR>症状名:',',')
    set @str=replace(@str,'<BR>症状概述:','')
    set @str=left(@str,len(@str)-patindex('%<BR>%<BR><BR>',@str)-1)
    return (@str)
    end
    go--测试
    select dbo.fgetstr('内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>')--在查询中使用
    select dbo.fgetstr(content) from jbxx--删除函数
    drop function fgetstr
      

  10.   

    没注意到,content中有'总科类名:'这几个字,函数要改一下:
    --创建字符串替换函数
    create function fgetstr(@str varchar(1000))
    returns varchar(1000)
    as
    begin
    set @str=right(@str,len(@str)-5)  --去掉'总科类名:'这几个字
    set @str=replace(@str,'<BR>分科类名:',',')
    set @str=replace(@str,'<BR>病名:',',')
    set @str=replace(@str,'<BR>症状名:',',')
    set @str=replace(@str,'<BR>症状概述:','')
    set @str=left(@str,len(@str)-patindex('%<BR>%<BR><BR>',@str)-1)
    return (@str)
    end
      

  11.   

    zjcxc(邹建):
       提示错误信息: 在关键字 'select' 附近有语法错误。
      

  12.   

    没错啊,我测试的结果正常:
    --try:
    --创建字符串替换函数
    create function fgetstr(@str varchar(1000))
    returns varchar(1000)
    as
    begin
    set @str=right(@str,len(@str)-5)  --去掉'总科类名:'这几个字
    set @str=replace(@str,'<BR>分科类名:',',')
    set @str=replace(@str,'<BR>病名:',',')
    set @str=replace(@str,'<BR>症状名:',',')
    set @str=replace(@str,'<BR>症状概述:','')
    set @str=left(@str,len(@str)-patindex('%<BR>%<BR><BR>',@str)-1)
    return (@str)
    endgo--测试
    select dbo.fgetstr('总科类名:内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>')--在查询中使用
    --创建测试表
    create table jb(content varchar(200))
    insert into jb values('总科类名:内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>')
    select dbo.fgetstr(content) from jb--删除函数
    drop function fgetstr
    drop table jb
      

  13.   

    照你上面的做法没有错误,可是我把select dbo.fgetstr(content) from binli套到我那用时,就不行了,不能把字段当参数传递了。 
    其实: '总科类名:内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>' 只不过是content字段的内容之一,他还有别的啊! 如:'总科类名:外科<BR>分科类名:皮肤病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>'  所以一定得用content字段做参数传递才行。还有我其实是想单独分别取出 内科,传染病,病毒性疾病,流行性感冒 !如何做啊!真麻烦你了。谢谢!
      

  14.   

    tree querywww.csdn.net/develop/Read_Article.asp@Id=18666
      

  15.   

    to zjcxc(邹建):
    你还是不在吗?
       问你最后一个问题: 
          我其实是想单独分别取出 内科,传染病,病毒性疾病,流行性感冒 !如何做啊!      真麻烦你了。谢谢!
      

  16.   

    你的数据是不是有点问题?
    '总科类名:内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>' 只不过是content字段的内容之一,他还有别的啊! 如:'总科类名:外科<BR>分科类名:皮肤病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>' 按照我的理解:
    总科类名:内科      为第一组数据
    分科类名:传染病   为第二组数据
    每组数据之间用<BR>分隔
    是这样的吗?
    可是,这句'症状概述:<BR>头痛,咽喉红肿。'
    又不符合上述规范.
    你解释一下先吧
      

  17.   

    --如果排除了上面不符合规范的地方,你可以写这样的函数
    --参数@str为整个字符,参数@name为类别名,返回指定类别的值
    create function fgetstr(@str varchar(1000),@name varchar(100))
    returns varchar(1000)
    as
    begin
    declare @i1 int,@i2 int
    select @str='<BR>'+@str+'<BR>',@name='<BR>'+@name+':'
    set @i1=charindex(@name,@str)
    set @i2=charindex('<BR>',@str,@i1+1)-@i1
    set @str=substring(@str,@i1,@i2)
    set @str=right(@str,@i2-len(@name))
    lbexit:
    return (@str)
    endgo--测试
    select dbo.fgetstr('总科类名:内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>','总科类名')
    select dbo.fgetstr('总科类名:内科<BR>分科类名:传染病<BR>病名:病毒性疾病<BR>症状名:流行性感冒<BR>症状概述:<BR>头痛,咽喉红肿。<BR><BR>','病名')
    go--删除自定义函数,在你的程序中不要执行这一句,删除了函数以后就不能用了.
    drop function fgetstr
      

  18.   

    不知道:
    我把select dbo.fgetstr(content) from binli套到我那用时,就不行了,不能把字段当参数传递了。是什么意思?你在你的程序中是怎么样用的.
      

  19.   

    ----我把select dbo.fgetstr(content) from binli套到我那用时,就不行了,不能把字段当参数传递了。----
    真不好意思,这是我的一个疏忽,当时binli表中的content字段中含有空值,空值传过去当然会出错了。把空值过滤掉就没问题了。
      

  20.   

    zjcxc(邹建): 
    真的十分谢谢你,问题解决了。你的SQL学的那么棒,真是佩服极了。