SQL模糊查询语句

Neil198 2009-03-16 02:25:40
例如:
TableName
----------------------------
ID Text
0 今天天气很不错
1 天气很好
2 问题说明越详细,回答也会越准确!参见如何提问。
3 当您的问题得到解答并完成结帖操作,CSDN将按本帖提问分数的50%,做为可用分返还给您。


select Text from TableName where Text like '%str%'

模糊查询怎么查询的数据最多呢?比如str=“在今天天气不错的”时候就查不出来数据了
怎么样可以模糊查询最大化的查询出类似的数据
...全文
6544 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgdwltao 2011-08-21
  • 打赏
  • 举报
回复
学习中!!!好多啊!
meirenhaokan 2010-05-28
  • 打赏
  • 举报
回复
同意18楼的,但不知这样还有意义不
a404125339 2009-11-06
  • 打赏
  • 举报
回复
学习了
hrfdotnet 2009-09-07
  • 打赏
  • 举报
回复
将str="今天天气很不错"进行格式化为:
str="%今%天%天%气%很%不%错%"
然后再查询,这样结果应该是最多的。
Neil198 2009-03-17
  • 打赏
  • 举报
回复
怎么进行词义分解呢?是不是要有一个常用词的数据表。那数据去这个表里面匹配?
pdsnet 2009-03-17
  • 打赏
  • 举报
回复
学习...未来一段时间内是用不上..
feizai1314 2009-03-17
  • 打赏
  • 举报
回复
7楼的那位同志,也太能了点吧.不过很好,值得学习.
慢两拍 2009-03-17
  • 打赏
  • 举报
回复
长知识了..
wulijuan008 2009-03-17
  • 打赏
  • 举报
回复
这个问题太难了 , 有点不能驾驭!!
sunriseknits 2009-03-17
  • 打赏
  • 举报
回复
不应包含“在”字
ks_reny 2009-03-17
  • 打赏
  • 举报
回复
學習.
ws_hgo 2009-03-17
  • 打赏
  • 举报
回复
我们通过例子来学习,假设有表 students,其中的 address 是全文本检索的列。
1. 查询住址在北京的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'beijing' )
remark: beijing是一个单词,要用单引号括起来。 网管下载dl.bitscn.com

2. 查询住址在河北省的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province"' )
remark: HEBEI province是一个词组,在单引号里还要用双引号括起来。

中国网管论坛bbs.bitsCN.com


3. 查询住址在河北省或北京的学生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province" OR beijing' )
remark: 可以指定逻辑操作符(包括 AND ,AND NOT,OR )。

网管下载dl.bitscn.com


4. 查询有 '南京路' 字样的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'nanjing NEAR road' )
remark: 上面的查询将返回包含 'nanjing road','nanjing east road','nanjing west road' 等字样的地址。
A NEAR B,就表示条件: A 靠近 B。

网管网www.bitscn.com


5. 查询以 '湖' 开头的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"hu*"' )
remark: 上面的查询将返回包含 'hubei','hunan' 等字样的地址。
记住是 *,不是 %。

网管论坛bbs_bitsCN_com

6. 类似加权的查询
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'ISABOUT (city weight (.8), county wright (.4))' )
remark: ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数(我的理解)。表示不同条件有不同的侧重。 网管下载dl.bitscn.com

7. 单词的多态查询
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'FORMSOF (INFLECTIONAL,street)' )
remark: 查询将返回包含 'street','streets'等字样的地址。
对于动词将返回它的不同的时态,如:dry,将返回 dry,dried,drying 等等。
lf44785170 2009-03-17
  • 打赏
  • 举报
回复
百度搜索都没有这么聪明。。。
sayfree 2009-03-16
  • 打赏
  • 举报
回复
应该做分词处理吧。这是个比较复杂都问题。
shenzhenNBA 2009-03-16
  • 打赏
  • 举报
回复
分析一下:
SQL语句:select Text from TableName where Text like '%str%'
比如str=“在今天天气不错的”时候就查不出来数据了(?!)

其实这还是可以理解的,看楼主的语句知道,匹配的模式是: %str%,也就是说在str的两头(首尾)可以是任意的字符(串),但str是一个“精确的”字符串,所以要查找的字段中必含有该“精确”的字符串,试比较:

[1]“在今天天气不错的” 不包含在 “今天天气很不错”;
[2]“在今天天气不错的” 不包含在 “天气很好”;
[3]“在今天天气不错的” 不包含在 “问题说明越详细,回答也会越准确!参见如何提问”;
[4]“在今天天气不错的” 不包含在 “当您的问题得到解答并完成结帖操作,CSDN将按本帖提问分数的50%,做为可用分返还给您。”

由以上分析可以看见,变量str所包含的值(在今天天气不错的)都不包含在字段Text中,所以即使是模糊也没有查询到,所以看似相识(的部分文字),其实对computer来说是不一样的,关键你模糊匹配的是两头,对变量本身是没有匹配的可以说定死了的(精确的),所以SQL出来的结果为空是正确的;

如果你想要最大范围得到相似的的结果,方法可以有如下两种:
[1]把变量str的值变短点(比如:str =“天气”),则结果肯定会更多,因为匹配的值很短,所以与之相匹配的可能性变大,相当于增大了匹配的范围;
[2]可以对变量进行词义分解(为常用的词),比如分解为“今天”,“天气”,“不错”,再用(任意)匹配符号(%,_,?,[],^等)将它们连接起来,比如分解后组合成str的值 = “%在%今天%天气%不错%的%” 或者 = “%[‘今天’,‘天气’,‘不错’]%”,相信结果肯定会更多,因为增加了匹配的模式,相当于增大了匹配的范围;(注意全角和半角的问题)

回答是否精彩,呵呵...有分可以加吗?穷多了...^=^
huzi01245 2009-03-16
  • 打赏
  • 举报
回复
text 字段做全文索引 用 CONTAINS 来查询
arrow_gx 2009-03-16
  • 打赏
  • 举报
回复
text 字段做全文索引 用 CONTAINS 来查询
dawugui 2009-03-16
  • 打赏
  • 举报
回复
这个需求基本无法实现,帮顶.
htl258_Tony 2009-03-16
  • 打赏
  • 举报
回复
这个挺有难度的,帮顶.

34,597

社区成员

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

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