sql中contains,like,patindex ,charindex和freetext语句的区别?
2016-07-30 23:32
543 查看
可以通过like谓词来检索信息,但是like谓词在检索时是不区分大小写的,而使用contains
谓词在数据库中检索信息则可以做到区分大小写的功能,同时contains在某些方面所提供的文本查询能力比like 强,经过实践验证,charindex()并不比前面加%的like更能提高查询效率,并且charindex()会使索引失去作用(指sqlserver数据库)
CONTAINS和FREETEXT。CONTAINSSQLServer
2000提供的全文检索语句主要有语句的功能是在表的所有列或指定列中搜索:一个字或短语;一个字或短语的前缀;与一个字相近的另一个字;一个字的派生字;一个重复出现的字。
适用性测试结果:
1)charindex对于检索结果最大位移有要求,经测试,Sql2008中的ntext字段,位移不能超过3987,否则返回0;
2)patindex
和 like 无位移限制;
3)patindex
支持匹配表达式,可以应用正则;
4)like可以用'%oldstring%'进行模糊匹配;
5)charindex只能匹配固定字符串
CONTAINS语句的语法格式为:
CONTAINS({column
| *}), <contains_search
_condition>)
其中,column是搜索列,使用“*”时说明对表中所有全文索引列进行搜索。Contains_search_
condition
说明CONTAINS语句的搜索内容,其语法格式为:
{<simple_term>|<prefix_term>|<proximity_term>|<generation_term>|<weighted_term>}[{{AND|AND
NOT|OR}<contains_search_condition>}]
[...n]
下面就simple_term和prefix_term参数做简要说明:
simple_term是CONTAINS语句所搜索的单字或短语,当搜索的是一个短语时,必须使用双引号作为定界符。其格式为:
{‘word’|“
phrase”}
prefix_term说明CONTAINS语句所搜索的字或短语前缀,其格式为:
{“word*”
| “phrase*”}
例如,下面语句检索Book表的Title列和Notes列中包含“database”或“computer”字符串的图书名称及其注释信息:
select
title, notes
from book
where contains(tilte,
‘database’) or contains(notes,‘database’)
or contains(title,‘computer’)
or contains(notes,‘computer’)
FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所以,FREETEXT语句所执行的功能又称做自由式全文查询。
FREETEXT语句的语法格式为:FREETEXT({column
| * },‘freetext_string’)
其中,column是被搜索列,使用“*”时说明对表中的所有全文索引列进行搜索。Freetext_string参数指出所搜索的自由文本格式字符串。
例如,下面语句使用FREETEXT语句搜索Book表中包含“Successful
Life”字符串的数据行:
select
title, notes
from book
where
freetext(*,‘Successful Life’)
谓词在数据库中检索信息则可以做到区分大小写的功能,同时contains在某些方面所提供的文本查询能力比like 强,经过实践验证,charindex()并不比前面加%的like更能提高查询效率,并且charindex()会使索引失去作用(指sqlserver数据库)
CONTAINS和FREETEXT。CONTAINSSQLServer
2000提供的全文检索语句主要有语句的功能是在表的所有列或指定列中搜索:一个字或短语;一个字或短语的前缀;与一个字相近的另一个字;一个字的派生字;一个重复出现的字。
适用性测试结果:
1)charindex对于检索结果最大位移有要求,经测试,Sql2008中的ntext字段,位移不能超过3987,否则返回0;
2)patindex
和 like 无位移限制;
3)patindex
支持匹配表达式,可以应用正则;
4)like可以用'%oldstring%'进行模糊匹配;
5)charindex只能匹配固定字符串
CONTAINS语句的语法格式为:
CONTAINS({column
| *}), <contains_search
_condition>)
其中,column是搜索列,使用“*”时说明对表中所有全文索引列进行搜索。Contains_search_
condition
说明CONTAINS语句的搜索内容,其语法格式为:
{<simple_term>|<prefix_term>|<proximity_term>|<generation_term>|<weighted_term>}[{{AND|AND
NOT|OR}<contains_search_condition>}]
[...n]
下面就simple_term和prefix_term参数做简要说明:
simple_term是CONTAINS语句所搜索的单字或短语,当搜索的是一个短语时,必须使用双引号作为定界符。其格式为:
{‘word’|“
phrase”}
prefix_term说明CONTAINS语句所搜索的字或短语前缀,其格式为:
{“word*”
| “phrase*”}
例如,下面语句检索Book表的Title列和Notes列中包含“database”或“computer”字符串的图书名称及其注释信息:
select
title, notes
from book
where contains(tilte,
‘database’) or contains(notes,‘database’)
or contains(title,‘computer’)
or contains(notes,‘computer’)
FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所以,FREETEXT语句所执行的功能又称做自由式全文查询。
FREETEXT语句的语法格式为:FREETEXT({column
| * },‘freetext_string’)
其中,column是被搜索列,使用“*”时说明对表中的所有全文索引列进行搜索。Freetext_string参数指出所搜索的自由文本格式字符串。
例如,下面语句使用FREETEXT语句搜索Book表中包含“Successful
Life”字符串的数据行:
select
title, notes
from book
where
freetext(*,‘Successful Life’)
相关文章推荐
- sql中contains,like,patindex ,charindex和freetext语句的区别?
- 请问v$sqlarea,v$sql,v$sqltext这三个视图提供的sql语句有什么区别 -- ITPUB 贴
- sql中全文检索CHARINDEX 和PATINDEX 区别
- v$sqlarea,v$sql,v$sqltext提供的sql语句区别
- SqlServer之like、charindex、patindex区别及性能分析(转载)
- sql语句 charindex 的用法 比较 CHARINDEX 和 PATINDEX
- 【SQL分享】patindex和charindex的区别
- SQL中代替Like语句的函数charindex
- v$sqlarea,v$sql,v$sqltext这三个视图提供的sql语句有什么区别?
- v$sqlarea,v$sql,v$sqltext这三个视图提供的sql语句有什么区别
- v$sqlarea,v$sql,v$sqltext提供的sql语句区别
- SQL 语句中的in、find_in_set、like的区别
- SQL三种模糊查询方法(LIKE)and (PATINDEX() . CHARINDEX())对比
- SQL语句中find_in_set、like、in的区别及使用方法
- SQL 语句中的in、find_in_set、like的区别
- SQL 语句中的in、find_in_set、like的区别
- Sql语句中,Contains与Like查询结果不相同的问题
- SQL 语句中的in、find_in_set、like的区别
- v$sqlarea,v$sql,v$sqltext提供的sql语句区别
- v$sqlarea,v$sql,v$sqltext这三个视图提供的sql语句的区别