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 - 查询不区分大小写的数据库的主要内容,如果未能解决你的问题,请参考以下文章

mysql模糊查询区分大小写的问题~~

mysql数据查询分不分大小写

mysql 字段值不区分大小写

oracle 模糊查询 模糊大小写

sql语法有没有区分大小写?

sql语句查询字母字段时不区分大小写