Coldfusion - 查询不区分大小写的数据库
Posted
技术标签:
【中文标题】Coldfusion - 查询不区分大小写的数据库【英文标题】:Coldfusion - Query a database not case-sensitive 【发布时间】:2013-06-11 15:00:11 【问题描述】:这个查询的结果是能够输入并得到一个返回的查询(同时忽略大小写)。
例如:
如果我的表中有这些列-> 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()、这两者的混合或完全不同的东西来找到这个问题的解决方案?
【问题讨论】:
用 UPPER 或 LOWER 包裹等式的两边 @Randy 在变量标签之外? 您使用的是哪个 DBMS?后格雷斯?甲骨文? 您需要一个 ColdFusion 函数 (LCASE/UCASE
) 来转换 #firstnamevar#
变量。然后是一个数据库字符串函数来转换SQL中的表列值。后者是特定于数据库的。您能否更新问题标签以指示您正在使用的数据库和版本?
【参考方案1】:
您需要在数据库列之前使用 UPPER,在参数值之前使用 UCase。此外,您不需要在名字周围使用井号。像这样:
WHERE UPPER(firstname)
LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#UCase(firstnamevar)#%" />
【讨论】:
【参考方案2】:如果这是一个 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 会导致错误。
【讨论】:
例程(上)模棱两可 - 多个例程解析给定签名。 错误信息是什么?我猜是未定义的变量。以上是关于Coldfusion - 查询不区分大小写的数据库的主要内容,如果未能解决你的问题,请参考以下文章