like只包含所选关键词的查询

xfxq 2014-09-30 10:23:42
ID CF
1 语文50,数学40,音乐10
2 语文100
3 数学60,音乐40
4 语文80,数学20
____________________________________

select id from 表 where cf like'%语文%数学%'

这样会显示1和4的记录。。。。我只想显示4,怎么写?like只包含所选关键词。。。。
...全文
163 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbdzjx 2014-09-30
  • 打赏
  • 举报
回复
select id from 表 where cf like'%语文%' and cf like'%数学%' and len(cf)-len(replace(cf, ',',''))=1
也就是查询包含“语文”,而且也包含“数学”,而且只有一个“,”的记录。
lize1987 2014-09-30
  • 打赏
  • 举报
回复
like'%语文%数学_' or cf like'%语文%数学__'
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复


select * from tablename
 where REPLACE( dbo.get_segment1(CF) ,',','') in('语文数学' ,'数学语文')
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复

--创建分隔函数
create FUNCTION [dbo].[get_segment1](@text nvarchar(20))
RETURNS nvarchar(20)
AS
BEGIN
    DECLARE @len int
    DECLARE @segment nvarchar(20), @iSegment int
    DECLARE @ch nvarchar(1), @iCh int
    DECLARE @segType int, @chType int -- 0 数字, 1 其他
     
    SET @len = LEN(@text)
    SET @iCh = 1
    WHILE @iCh <= @len
    BEGIN
 
        SET @ch = SUBSTRING(@text, @iCh, 1)
        SET @chType = CASE WHEN @ch BETWEEN N'0' AND N'9' THEN 0
                             ELSE 1
                        END
 
        IF @iCh = 1
        BEGIN
 
            SET @segType = @chType
            SET @segment = @ch
            SET @iSegment = 1
 
        END
        ELSE IF @chType=1 
        begin
        
        SET @segment = @segment + @ch
           
        END
       
        SET @iCh = @iCh+1
    END
 

 
    RETURN @segment
END
GO

--运行代码 试试
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复
引用 6 楼 xfxq 的回复:
我只是举个例子,不一定是这个顺序的。。。也可能 语文50,体育10,数学40
那就分隔吧,把汉字和数字分隔开 然后汉字=’语文数学‘ OR ’数学语文‘ 或者进行行分隔,把没个学科成绩作为一行。然后再判断!
俺是大菠萝 2014-09-30
  • 打赏
  • 举报
回复
单就范式规则来说,你这个就不符合; 又想马儿跑,又让马儿不吃草,哪有这么好的事?
xfxq 2014-09-30
  • 打赏
  • 举报
回复
我只是举个例子,不一定是这个顺序的。。。也可能 语文50,体育10,数学40
reenjie 2014-09-30
  • 打赏
  • 举报
回复
那就用charindex()了
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复
引用 3 楼 xfxq 的回复:
那不通用的,继续求高手
这个为啥不可以,基本你要查找只有语文和数学成绩的,没有其他科目成绩的。 数学后面只会有1 -2位数字的成绩啊!逻辑哪里不对? 要是比较通用的话就是把字符串汉字和数字拆分。还有汉字=’语文数学‘
xfxq 2014-09-30
  • 打赏
  • 举报
回复
那不通用的,继续求高手
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复
这样成绩只能是语文,数学。如果成绩是数学40,语文50就筛选不了了!
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复
select id from 表 where cf like'%语文%数学_' or cf like'%语文%数学__'
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复
引用 13 楼 xfxq 的回复:
感谢alimake的帮助,因输入数据的不规范性,分数可能会漏写,还有不是数字的其它参数,比如数学101,数学102,所以不可用,楼上zbdzjx想法应该可行。。。因为输入参数可能两个也可能一个三个。。。判断,的数量应该可以。
你这里1行还可能有2个数学成绩?那么12楼的也不行啊。他会把‘数学12,数学20,语文30’ 删除掉的
xfxq 2014-09-30
  • 打赏
  • 举报
回复
感谢alimake的帮助,因输入数据的不规范性,分数可能会漏写,还有不是数字的其它参数,比如数学101,数学102,所以不可用,楼上zbdzjx想法应该可行。。。因为输入参数可能两个也可能一个三个。。。判断,的数量应该可以。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧