SQL for Mixed Case筛选器

问题描述:

我只是想知道如何搜索任何组合的案例。例如,我想找到姓'davies'的所有员工,但我希望能够找到“DavIes”或“DAVies”等任何组合的案例。这是我试过的。SQL for Mixed Case筛选器

SELECT LAST_NAME 

FROM EMPLOYEES 

WHERE DEPARTMENT_ID = (SELECT DEPARTMENT_ID 

FROM EMPLOYEES 

WHERE LAST_NAME = '[Dd][Aa][Vv][Ii][Ee][Ss]'); 
+0

我会写这UPPER或降低名称的函数的索引。这样数据库可以使用基于功能的索引来搜索,而不仅仅是姓氏。 [文档](https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_indexes.htm#ADFNS257) – xQbert

+1

[Oracle中区分大小写的搜索]的可能重复(https://*.com/问题/ 5391069 /不区分大小写的搜索在oracle中) – xQbert

我会用UPPERLOWER功能和IN

SELECT LAST_NAME 
FROM EMPLOYEES 
WHERE DEPARTMENT_ID IN (
    SELECT DEPARTMENT_ID 
    FROM EMPLOYEES 
    WHERE UPPER(LAST_NAME) = 'DAVIES' 
); 

不幸的是无效的索引的使用。

+0

你为什么需要IN?你正在寻找雇员的姓氏 – maSTAShuFu

+0

@maSTAShuFu是的,它很奇怪。我没有注意到他正在查询子查询中的同一张表。我错误地认为它必须是不同的表格。 –

+0

切换到=,它的工作原理,谢谢。 – Glaz

使用UPPER

SELECT * 
    FROM EMPLOYEES 
    WHERE UPPER(LAST_NAME) = 'DAVIES'