Coldfusion - 查询不区分大小写的数据库

时间:2013-06-11 15:00:12

标签: sql coldfusion

此查询的结果是能够输入并获取返回的查询(忽略大小写的所有内容)。


例如:

如果我的表中有这些列 - > id,名字,姓氏

对于ID

我可以输入151,442,112,它应该返回我的结果

对于名字

我可以输入JiM,jim或JIM,它应该返回我的结果

姓氏

我可以输入Smith,smith,SMITH或SmiTH,它应该返回我的结果

目的是为用户(输入数据和数据库)提供不区分大小写的功能 - 因为每条记录对数据库都是唯一所以我不必担心我输入名字/名字组合,如jim smith或JIM SMITH)

这是我的WHERE子句

WHERE #firstname# LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#firstnamevar#%" />


我的问题是我是否需要使用lower(),LCASE(),这两者的混合或完全不同的东西来找到这个问题的解决方案?

2 个答案:

答案 0 :(得分:2)

您需要在数据库列之前使用UPPER,并在param值之前使用UCase。此外,你不需要名字周围的英镑符号。像这样:

WHERE UPPER(firstname)
LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#UCase(firstnamevar)#%" />

答案 1 :(得分:1)

如果这是一个sql server数据库,你不必做任何事情,因为它对varchar列进行了不区分大小写的搜索。

否则,将upper()函数应用于sql字段,将ucase()应用于ColdFusion变量。像这样:

where upper(firstname) 
like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#ucase(firstnamevar)#%>

然而,这将是缓慢的。使用索引在db中存储字段的大写版本可能是值得的。然后你可以这样做:

where upperCaseFirstName
like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#ucase(firstnamevar)#%>

顺便说一下,你发布了这个,

 WHERE #firstname# 
 LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#firstnamevar#%" >

除非你有一个名为firstname的变量,否则octothorps会导致错误。