SQL模糊查询中的问题

"select app_name,app_picture,app_sintroduction from bangongchuli where upper(app_name) like '%" + Appname + "%' || lower(app_name) like '%" + Appname + "%'";
我的数据库中有OpenOffice这条记录,Appname是从页面get的数据,为什么Appname是O的时候可以查询的到,而我输入Open或者全面OpenOffice都无结果呢,请帮我解答一下,没有分,请见谅!
select app_name,app_picture,app_sintroduction from bangongchuli where upper(app_name) like '%open%' || lower(app_name) like '%open%'
这句话输入到workbench是能搜索出在来的,为什么在java中不对呢?

你这个语句,是将app_name转化成全大写或全小写,去和Appname作比对。当Appname只有大写字母或小写字母的时候,可以得到结果,这就是为什么O可以搜出来的原因。而当Appname中即包含大写,又有小写的时候,是无法得到结果的。

而你在workbench里搜索的时候,用的是open(全小写)。所以能搜索出来。

总之,是你语句写得有问题。涉及到大小写转换时,需要将所有参与比对的对象(这里是app_name和Appname)全都转成大写(或小写),再进行比对。追问

app-name是数据库里存放的,所以大小写诗不确定的,请问有什么好的办法吗?

追答

那就全转成大写以后再比较呗。

追问

数据库存放的是不确定的,前台获得的大小写也是不确定的,都转换貌似行不通,不过还是谢了

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-11
你的写法有问题。那个lower前面少了个 or 。不过就算有,也有可能得不到正确的结果。不建议这么写,不如把两个运算值都转成大写或小写。upper(app_name) like '%" + upper(Appname)+ "%'“。追问

||不对吗?

追答

sql 语言中的或者使用or。|| 这个是C#的语法吧。

相似回答