Oracle不区分大小写查询:如何提取去重并统一显示值?
统一大小写并检索去重值的实现方案
嘿,这个需求在数据库处理里挺常见的,核心思路就是先把所有不规则大小写的字段值统一成你想要的格式(比如首字母大写、其余小写的English),再进行去重操作。下面我给你分主流数据库逐一说明具体实现方式:
MySQL/MariaDB
MySQL没有直接的首字母大写函数,不过我们可以通过字符串拼接函数手动实现格式统一,再配合DISTINCT去重:
SELECT DISTINCT CONCAT(UPPER(SUBSTRING(language_column, 1, 1)), LOWER(SUBSTRING(language_column, 2))) AS standardized_language FROM your_table_name;
- 解释:
SUBSTRING截取首字母转大写,剩下的部分转小写,再拼接成标准格式,最后用DISTINCT过滤重复值。
PostgreSQL
PostgreSQL自带INITCAP()函数,完美适配你的需求——它会自动把每个单词的首字母大写,其余字母小写,直接配合DISTINCT即可:
SELECT DISTINCT INITCAP(language_column) AS standardized_language FROM your_table_name;
- 举个例子:不管输入是
english、ENGLISH还是eNgLiSh,都会输出English。
SQL Server
SQL Server可以用STUFF()函数结合大小写转换来实现格式统一:
SELECT DISTINCT STUFF(LOWER(language_column), 1, 1, UPPER(LEFT(language_column, 1))) AS standardized_language FROM your_table_name;
- 解释:先把整个字段转小写,再用
STUFF把首字母替换成大写版本,最后去重。
Oracle
Oracle同样提供了INITCAP()函数,用法和PostgreSQL一致:
SELECT DISTINCT INITCAP(language_column) AS standardized_language FROM your_table_name;
额外注意事项
- 如果你的字段里包含多单词内容(比如
american english),INITCAP()会把每个单词的首字母都大写,输出American English,如果这不符合你的预期,可以根据实际需求调整字符串处理逻辑。 - 要是你只需要去重、不纠结显示格式,也可以直接用
DISTINCT LOWER(language_column)或DISTINCT UPPER(language_column),不过输出就是全小写或全大写的格式了。
内容的提问来源于stack exchange,提问作者yasmeen
相关产品推荐
相关产品推荐

