新手的问题 -------关于全文检索中出现特殊字符,如# ^ % $ ,大家是如何处理的,特急 (在线)

dongchuanlu 2005-07-21 10:42:45
# ^ % $ 以上字符在全文检索中出现ERROR,请问我应该如何处理.

有人说干脆不检索这几个字符(从查询串中去掉),但是我想知道有没有更好的方法.

等待回信中..

感谢各位兄弟帮忙.
...全文
723 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunbird2002 2005-09-07
  • 打赏
  • 举报
回复
学习!
phantomMan 2005-07-21
  • 打赏
  • 举报
回复
如果你是这样搜索的就没有问题:
select * from quanwen --order by cast(id as varchar(10))
where contains(name,'硫酸#')
order by name

如果你是单独搜索 '#' 才会出现这种问题,你可以判断 ' '是否是这些特殊字符,然后在查询
zjcxc 元老 2005-07-21
  • 打赏
  • 举报
回复
不能用全文检索来检索,可以使用like或者patindex之类的方法
vivianfdlpw 2005-07-21
  • 打赏
  • 举报
回复
利用like的escape可以查询这些特殊字符:

declare @tb table(ID int identity,name varchar(20))
insert @tb(name)
select 'AA#A' union select 'A#B%C' union select 'B$B^B' union select 'C%CC'

select * from @tb where name like '%!%%' escape '!'

--结果
/*

ID name
----------- --------------------
1 A#B%C
4 C%CC

(所影响的行数为 2 行)
*/
dongchuanlu 2005-07-21
  • 打赏
  • 举报
回复
To phantomMan(去年Delphi,年底.net,今年5月SQL,现在XML,马上Socket.) ( )

不过我刚才试了一下,即使noise.chs里面没有任何字符,它也不能查询 # 这些字符;===〉现在的问题是如果我在我的检索字符中加入#等,就会出现Error,除了捕捉错误以外有其他方法吗?


summerICEREDTEA 2005-07-21
  • 打赏
  • 举报
回复
加转义符号?
那天看书有个
select * from table where col like 'abc%%' escape c
是说把c后面的特殊字符转为查询字符
不知道MSSQL支持不支持
phantomMan 2005-07-21
  • 打赏
  • 举报
回复
只有你把全文索引服务停止后才能 更新或者删除 noise.chs;

不过我刚才试了一下,即使noise.chs里面没有任何字符,它也不能查询 # 这些字符;但是可以查询到 a 等这些字符;
dongchuanlu 2005-07-21
  • 打赏
  • 举报
回复
To vivianfdlpw()
如果我要查询这些字符呢?


To phantomMan(去年Delphi,年底.net,今年5月SQL,现在XML,马上Socket.)

我的noise.chs文件只有 gh 两个字符,没有其他的东西。

不过现在我的noise.chs,没有办法修改了,也不能rename,不能删除。救命呀。

phantomMan 2005-07-21
  • 打赏
  • 举报
回复
出错信息是不是指 "有忽略词";

如果是的话要到 D:\Program Files\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config 下面的noise.chs 的文件中把这些特殊符号去掉
vivianfdlpw 2005-07-21
  • 打赏
  • 举报
回复
这些特殊字符在其它搜索引擎里边都是被屏蔽的吧
super_zhaowenke 2005-07-21
  • 打赏
  • 举报
回复
asicc码行吗?
97ce_twinkle 2005-07-21
  • 打赏
  • 举报
回复
检索 % 可用 [%] 替代,其他的你也这样子在外面加中括号看看。
dongchuanlu 2005-07-21
  • 打赏
  • 举报
回复
To zjcxc(邹建) ( )

难道我就不能检索出#……
MorningTea 2005-07-21
  • 打赏
  • 举报
回复
如果不用full-text,那么方法也是很多

1。select * from c where patindex('%^%',c_add) <> 0 ---除了%都可以
如果是单引号select * from c where patindex('%''%',c_add) <> 0

select * from c where charindex('%',c_add,1) <> 0 ---楼主说的几个都可以
select * from c where charindex('''',c_add,1) <> 0 ---单引号

2。如果用like,那么使用 escape 子句的模式匹配
可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 escape 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定由 where comment like ''%30!%%'' escape ''!'' 组成的 where 子句。如果不指定 escape 和转义符,sql server 将返回所有含字符串 30 的行。

--escape 关键字不一定是!,其它也可以,如下
select * from c where c_add like '%!%%' escape '!'
select * from c where c_add like '%s%%' escape 's'
select * from c where c_add like '%!#%' escape '!'
select * from c where c_add like '%!^%' escape '!'

34,872

社区成员

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

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