2

此查询的结果是能够输入并获得返回的查询(同时忽略大小写)。


例如:

如果我的表中有这些列-> id, first name, last name

对于身份证

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

对于名字

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

对于姓氏

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

目的是为用户(输入数据的用户和数据库)提供不区分大小写的功能 - 因为每条记录对数据库都是唯一的,所以如果我输入名字/姓氏组合,我不必担心作为吉姆史密斯或吉姆史密斯)

这是在我的 WHERE 子句中

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


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

4

2 回答 2

2

您需要在数据库列之前使用 UPPER,在参数值之前使用 UCase。此外,您不需要在名字周围使用井号。像这样:

WHERE UPPER(firstname)
LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#UCase(firstnamevar)#%" />
于 2013-06-11T15:20:51.480 回答
1

如果这是一个 sql server 数据库,您无需执行任何操作,因为它会在 varchar 列上进行不区分大小写的搜索。

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

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

但是,这会很慢。将字段的大写版本与索引一起存储在您的数据库中可能是值得的。然后你可以这样做:

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

顺便说一句,你发了这个,

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

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

于 2013-06-11T15:17:25.573 回答