我用来编写一个select查询,like语句的值是动态的。
AND e.rank_request_id = a.request_id
AND f.priority_request_id = a.request_id
AND b.status_type_id = c.status_id
AND b.status_request_id = a.request_id
AND a.request_id LIKE '%#form.searchbar#%'
但是只有字符串#form.searchbar#中的每个字符的Case匹配时才返回结果。
请为此建议一种解决方法,以使其不区分大小写。
答案 0 :(得分:17)
我不知道您使用的数据库,但如果这是针对Oracle的,那么您可以强制执行这两种情况。这虽然是执行时间的代价,因为它为该列中的所有值执行此操作,但是如果您拥有大量数据并且可以使用基于函数的索引解决该问题,则只会看到成本。对于Oracle来说,这样的事情就是这样:
AND UPPER(a.request_id) LIKE '%#UCase(Form.Searchbar)#%'
但我建议您使用查询参数,因为它似乎来自用户输入的框,所以:
AND UPPER(a.request_id) LIKE <cfqueryparam value="%#UCase(Form.Searchbar)#%" cfsqltype="cf_sql_varchar" />
答案 1 :(得分:2)
答案 2 :(得分:1)
您可以降低a.request_id和form.searchbar
AND lower(a.request_id) LIKE '%#form.searchbar#%'
答案 3 :(得分:1)
你可以像Snipe656建议的那样强制一切都是大写的。您还可以使用regexp_instr
函数进行不区分大小写的搜索。例如,在EMP
表中搜索ENAME
包含字符串'in'的每一行,不区分大小写
SQL> ed
Wrote file afiedt.buf
1 select ename, empno
2 from emp
3* where regexp_instr( ename, 'in', 1, 1, 1, 'i' ) > 0
SQL> /
ENAME EMPNO
---------- ----------
MARTIN 7654
KING 7839
在你的情况下,它可能类似于
AND regexp_instr( a.request_id, '#form.searchbar#', 1, 1, 1, 'i' ) > 0