2010-05-25 30 views
0

我在SQL查询精确匹配与SQL等,并且绑定

SELECT * FROM users WHERE name LIKE '%?%' 

绑定设置?困境。

现在,如果我想用类似的方法搜索一切工作,但如果没有更改sql,我想搜索完全匹配我现在不怎么做。

我尝试了一些正则表达式int文本框es: _jon \ jon \ [jon]和其他一些但没有正常工作。

任何想法?

+0

这是关于SQL或JPQL(和JPA)的问题吗? – 2010-05-25 15:56:40

回答

2

查询更改为

select * from users where name like '?' 

如果你想要做的通配符匹配,把通配符,你绑定变量字符串的一部分。如果你不想做通配符匹配,那就不要。

注意like=相同的性能除了当你的通配符是第一个字符串中(例如,'%bob')在这种情况下,查询优化器不能使用索引和查找你正在寻找的行。

+0

即将输入相同。 – 2010-05-25 12:27:09

+0

re:like和=具有相同的性能:在mysql中这是真的,但OP没有提及他/他正在使用哪个sql ... – oedo 2010-05-25 12:27:19

+0

@oedo:几乎每一个现代rdbms都是一样的。它使用*在少数情况下有所不同,但幸运的是优化器变得更加智能。 – Donnie 2010-05-25 12:40:11

0

如果sql包含%符号,则无法搜索完全匹配,因为它们是通配符。您需要更改SQL来

select * from users where name = '?' 

精确匹配

(你也可以使用select * from users where name like '?'但更低效)

0

是什么让你从改变SQL?

Like条件适用于'相似'匹配,而'='适用于完全匹配。