CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

请教一个有难度的SQL语句?

楼主chuxuecharp(初学者)2006-03-02 15:35:47 在 MS-SQL Server / 疑难问题 提问

一个表有多个记录,有一个KEYWORD字段,表示为关键字,而且要支持多个关键字,所以用了分号或者其它符号把它们隔开,如果现在要把其中一条记录的KEYWORD的值提取出来去和表中每条记录的KEYWORD做比较,再把相似的记录取出,SQL怎么写?  
  比如,一个记录的KEYWORD为”软件;硬件;电脑”  
  那么其它记录有可能是”   软件;手机”啥的.所以就得把单条的记录的KEYWORD里面的三个不同的关键字再与其它记录的KEYWORD里面的不同的多个关键字做对比,只要有一个关键字匹配的就把它取出来.SQL怎么写?能不能实现.  
  问题点数:50、回复次数:4Top

1 楼lsqkeke(可可)回复于 2006-03-02 15:40:51 得分 5

用函数吧,返回比一表变量的形式显示能匹配的数据集Top

2 楼ping3000(苦练葵花点穴手)回复于 2006-03-02 16:30:22 得分 20

DECLARE   @keyword   NVARCHAR(500)  
  DECLARE   @start   INT,@end   INT  
  DECLARE   @sql   NVARCHAR(1000)  
  SET   @keyword   =   '软件;硬件;电脑'  
  SET   @sql   =   '   1=0   '  
  SET   @start   =   1  
  SET   @end   =   CHARINDEX(';',   @keyword,   @start)  
  IF   @end   =   0   BEGIN   SET   @end   =   LEN(@keyword)   +   1   END  
  WHILE(@end   >   @start)  
          BEGIN  
          SET   @sql   =   @sql   +   '   OR   KEYWORD   like   ''%'   +   SUBSTRING(@keyword,   @start,   @end   -   @start)   +   '%'''  
  SET   @start   =   @end   +   1  
  SET   @end   =   CHARINDEX(';',   @keyword,   @start)  
  IF   @end   =   0    
  BEGIN    
  SET   @end   =   LEN(@keyword)   +   1    
  END  
  END  
  exec   ('select   *   from   表   where   '   +   @sql)Top

3 楼ping3000(苦练葵花点穴手)回复于 2006-03-02 16:36:48 得分 5

可以把KEYWORD拆开,和主键放到一个关联表中,那样做这种查询效率会好一些Top

4 楼mislrb(上班看看早报,上上CSDN,下班看看电影)回复于 2006-03-02 16:47:07 得分 20

create   table   t_a(keyword   varchar(100))  
  insert   into   t_a   select   '软件;硬件;电脑'  
  insert   into   t_a   select   '软件;手机'  
  insert   into   t_a   select   '软件'  
  insert   into   t_a   select   '手机'  
   
  if   exists(select   1   from   sysobjects   where   id=object_id(N'f_Occur')   and   xtype='FN')  
  drop   function   f_Occur  
  go  
   
  create   function   f_Occur(@String   varchar(1000),@Separator   varchar(2),@DestStr   varchar(1000))  
  returns   int  
  as  
    begin  
      declare   @i   int  
      set   @i=0  
   
      while   charindex(@Separator,@String)>0  
        begin  
          if   charindex(rtrim(ltrim(left(@String,charindex(';',@String)-1))),@DestStr)>0  
          begin  
  set   @i=1  
  break  
          end  
          select   @String=stuff(@String,1,charindex(';',@String),'')  
        end  
          if   charindex(rtrim(ltrim(@String)),@DestStr)>0  
          begin  
  set   @i=1  
          end  
        return(@i)  
  end  
  go  
   
  select   *   from   t_a   a   where   exists(select   1   from   t_a   where   dbo.f_occur('硬件;手机',';',a.keyword)=1)  
   
  Top

相关问题

  • 超难度sql 语句
  • 超难度sql 语句
  • 超难度SQL语句
  • 超难度sql语句
  • 超难度sql语句
  • 求SQL语句(有难度)???
  • 求高难度SQL语句
  • 百分求助高难度SQL语句!(只能用SQL语句!)
  • 一个高难度的SQL语句
  • 一个有难度的SQL语句!

关键词

  • 软件
  • start
  • sql
  • keyword
  • 记录
  • 关键字
  • 表
  • set

得分解答快速导航

  • 帖主:chuxuecharp
  • lsqkeke
  • ping3000
  • ping3000
  • mislrb

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo