sqlserver中的escape

数据库:sqlserver 2005
对下表(table)进行模糊查询:

idn
1_string
2%string
3[_]string
4[%]string

SQL:

select * from table where n like '/_%' escape '/' --返回第一行
select * from table where n like '/[%' escape '/' --返回第三和第四两行
select * from table where n like '/[/%' escape '/' --返回第三行
 


不难看出,escape指定的字符后面紧挨着的第一个字符被看作是普通字符而非通配符。
文档内容:
使用 ESCAPE 子句的模式匹配

可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定 WHERE comment LIKE '%30!%%' ESCAPE '!' 之类的 WHERE 子句。如果未指定 ESCAPE 和转义符,则数据库引擎将返回包含字符串 30 的所有行。

如果 LIKE 模式中的转义符后面没有字符,则该模式无效并且 LIKE 返回 FALSE。如果转义符后面的字符不是通配符,则将放弃转义符并将该转义符后面的字符作为该模式中的常规字符处理。这包括百分号 (%)、下划线 (_) 和左括号 ([) 通配符(如果它们包含在双括号 ([ ]) 中)。另外,在双括号字符 ([]) 内,可以使用转义符并将插入符号 (^)、连字符 () 和右括号 (]) 转义。

hibernate实现的方法:(很不想用的一种方法)

session.createCriteria(Table.class).add(Restrictions.sqlRestriction("{alias}.n like '"+queryString.replaceAll("_", "/_").replaceAll("%", "/%").replaceAll("\u005B", "/[")+"%' escape '/'")).list();
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值