此查询的结果是能够输入并获取返回的查询(忽略大小写的所有内容)。
例如:
如果我的表中有这些列 - > 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(),这两者的混合或完全不同的东西来找到这个问题的解决方案?
答案 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会导致错误。