这种查询条件怎么写?

cqq 2010-05-13 04:05:38

CREATE TABLE Info
(
id INT IDENTITY(1,1) PRIMARY KEY,
title nvarchar(50),
[content] nvarchar(MAX)
)

INSERT INTO Info VALUES('山东今年土豆丰收','恭喜了')
INSERT INTO Info VALUES('山东今年土豆、花生丰收','很不错')
INSERT INTO Info VALUES('山东丰收年','据悉今年花生、土豆的收成都不错')
INSERT INTO Info VALUES('丰收了','山东花生土豆丰收啦')
INSERT INTO Info VALUES('山东土豆丰收','今年山东土豆丰收')
INSERT INTO Info VALUES('哪里的土豆丰收?','好像是山东的')
INSERT INTO Info VALUES('今年是个丰收年','土豆收成不错哦')


select * from
(
select * from info
where title like '%土豆%' or [content] like '%土豆%'
) t
where title like '%山东%' or [content] like '%山东%'


我要实现这样的功能,
第一次查询土豆,只要title或者content任一一个满足就可以
再在结果中查询第二个关键词,
也就是我想实现搜索引擎的那个 在结果中查询的功能。

我想问,
上面的那句,怎么组合成
如下的sql啊,这样我好 动态的 拼sql字符串



SELECT * FROM Info
WHERE (title LIKE '%土豆%' or title like '%土豆%')
AND ([content] LIKE '%山东%' or [content] like '%山东%')

...全文
118 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
htl258_Tony 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chuifengde 的回复:]
SQL code
declare @a table
(
id INT IDENTITY(1,1) PRIMARY KEY,
title nvarchar(50),
[content] nvarchar(100)
)

INSERT INTO @a VALUES('山东今年土豆丰收','恭喜了')
INSERT INTO @a VALUES('山东今年土豆、……
[/Quote]
鸟儿sing在此处用的好,学习了
chuifengde 2010-05-13
  • 打赏
  • 举报
回复
declare @a table
(
id INT IDENTITY(1,1) PRIMARY KEY,
title nvarchar(50),
[content] nvarchar(100)
)

INSERT INTO @a VALUES('山东今年土豆丰收','恭喜了')
INSERT INTO @a VALUES('山东今年土豆、花生丰收','很不错')
INSERT INTO @a VALUES('山东丰收年','据悉今年花生、土豆的收成都不错')
INSERT INTO @a VALUES('丰收了','山东花生土豆丰收啦')
INSERT INTO @a VALUES('山东土豆丰收','今年山东土豆丰收')
INSERT INTO @a VALUES('哪里的土豆丰收?','好像是山东的')
INSERT INTO @a VALUES('今年是个丰收年','土豆收成不错哦')



select * from @a
where sign(charindex('山东',title)+charindex('山东',content))
& sign(charindex('土豆',title)+charindex('土豆',content))=1

--result
/*id title content
----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------
1 山东今年土豆丰收 恭喜了
2 山东今年土豆、花生丰收 很不错
3 山东丰收年 据悉今年花生、土豆的收成都不错
4 丰收了 山东花生土豆丰收啦
5 山东土豆丰收 今年山东土豆丰收
6 哪里的土豆丰收? 好像是山东的

(所影响的行数为 6 行)*/
cqq 2010-05-13
  • 打赏
  • 举报
回复
楼上的脸红什么
youyou2404 2010-05-13
  • 打赏
  • 举报
回复
htl258_Tony 2010-05-13
  • 打赏
  • 举报
回复
SELECT * FROM Info
WHERE cast(charindex('土豆',title) as bit)&cast(charindex('山东',title+','+[content]) as bit)|
cast(charindex('土豆',[content]) as bit)&cast(charindex('山东',title+','+[content]) as bit)=1
5楼可以改为这样
htl258_Tony 2010-05-13
  • 打赏
  • 举报
回复
CREATE TABLE Info
(
id INT IDENTITY(1,1) PRIMARY KEY,
title nvarchar(50),
[content] nvarchar(MAX)
)

INSERT INTO Info VALUES('山东今年土豆丰收','恭喜了')
INSERT INTO Info VALUES('山东今年土豆、花生丰收','很不错')
INSERT INTO Info VALUES('山东丰收年','据悉今年花生、土豆的收成都不错')
INSERT INTO Info VALUES('丰收了','山东花生土豆丰收啦')
INSERT INTO Info VALUES('山东土豆丰收','今年山东土豆丰收')
INSERT INTO Info VALUES('哪里的土豆丰收?','好像是山东的')
INSERT INTO Info VALUES('今年是个丰收年','土豆收成不错哦')
--SELECT * FROM Info

SELECT * FROM Info
WHERE cast(charindex('土豆',title) as bit)&cast(charindex('山东',title+','+[content]) as bit)=1 or
cast(charindex('土豆',[content]) as bit)&cast(charindex('山东',title+','+[content]) as bit)=1
/*
id title content
----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 山东今年土豆丰收 恭喜了
2 山东今年土豆、花生丰收 很不错
3 山东丰收年 据悉今年花生、土豆的收成都不错
4 丰收了 山东花生土豆丰收啦
5 山东土豆丰收 今年山东土豆丰收
6 哪里的土豆丰收? 好像是山东的

(6 行受影响)
*/
上面错了,改下
cqq 2010-05-13
  • 打赏
  • 举报
回复
看来还是很麻烦,那要是再搜索一个 花生 , 就更复杂了。
htl258_Tony 2010-05-13
  • 打赏
  • 举报
回复
CREATE TABLE Info
(
id INT IDENTITY(1,1) PRIMARY KEY,
title nvarchar(50),
[content] nvarchar(MAX)
)

INSERT INTO Info VALUES('山东今年土豆丰收','恭喜了')
INSERT INTO Info VALUES('山东今年土豆、花生丰收','很不错')
INSERT INTO Info VALUES('山东丰收年','据悉今年花生、土豆的收成都不错')
INSERT INTO Info VALUES('丰收了','山东花生土豆丰收啦')
INSERT INTO Info VALUES('山东土豆丰收','今年山东土豆丰收')
INSERT INTO Info VALUES('哪里的土豆丰收?','好像是山东的')
INSERT INTO Info VALUES('今年是个丰收年','土豆收成不错哦')

SELECT * FROM Info
WHERE cast(charindex('土豆',title) as bit)&cast(charindex('山东',title+','+[content]) as bit)^
cast(charindex('土豆',[content]) as bit)&cast(charindex('山东',title+','+[content]) as bit)=1
/*
id title content
----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 山东今年土豆丰收 恭喜了
2 山东今年土豆、花生丰收 很不错
3 山东丰收年 据悉今年花生、土豆的收成都不错
4 丰收了 山东花生土豆丰收啦
6 哪里的土豆丰收? 好像是山东的

(5 行受影响)
*/
cqq 2010-05-13
  • 打赏
  • 举报
回复
或者有别的思路也行,我就是想实现
在结果中搜索的功能。
htl258_Tony 2010-05-13
  • 打赏
  • 举报
回复
SELECT * FROM Info
WHERE (title LIKE '%土豆%' AND (title like '%山东%' or [content] like '%山东%'))
or ([content] like '%土豆%' AND (title like '%山东%' or [content] like '%山东%')
)
htl258_Tony 2010-05-13
  • 打赏
  • 举报
回复
错了。==
htl258_Tony 2010-05-13
  • 打赏
  • 举报
回复
SELECT * FROM Info
WHERE (title LIKE '%土豆%' AND ([content] LIKE '%山东%' or [content] like '%山东%'))
or (title like '%土豆%' AND ([content] LIKE '%山东%' or [content] like '%山东%')
)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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