Sql 通配符搜索的效果与o的预期相反,我是否编写了错误的查询?

Sql 通配符搜索的效果与o的预期相反,我是否编写了错误的查询?,sql,oracle,sql-like,Sql,Oracle,Sql Like,我有以下问题。我在数据库中查找任何包含短语“ssn”的表。它应该包括“SSN”。因为我使用的是LIKE运算符和%通配符,所以我希望查询结果中会出现诸如“Employee_SSN”、“配偶SSN”、“SSN”之类的术语。但事实并非如此。事实上,如果我不在所有大写字母中输入SSN,它将被拒绝。我不确定我是否无意中改变了其中一个设置或类似的东西,但我觉得这似乎不对劲 select owner, table_name from all_tab_columns where column_name LI

我有以下问题。我在数据库中查找任何包含短语“ssn”的表。它应该包括“SSN”。因为我使用的是LIKE运算符和%通配符,所以我希望查询结果中会出现诸如“Employee_SSN”、“配偶SSN”、“SSN”之类的术语。但事实并非如此。事实上,如果我不在所有大写字母中输入SSN,它将被拒绝。我不确定我是否无意中改变了其中一个设置或类似的东西,但我觉得这似乎不对劲

select owner, table_name  from all_tab_columns  where column_name LIKE x
“%SSN%”

我们建议您不要使用区分大小写的列名,但如果使用,则需要对此进行说明

一种常见的技巧是在谓词子句中使用上的UPPER()或LOWER()函数,然后搜索大写或小写文本,这将覆盖所有可能的排列


12c版本2(12.2)也使搜索文本值变得更容易

另一个选项是尝试
whereupper(column\u name)比如“%SSN%”
whereregexp(column\u name,'SSN','i')。。
create table so_case_cols (
 SSN varchar2(11),
 "ssn" varchar2(11),
 "ssN" varchar2(11));

select * from user_tab_cols where upper(column_name) like '%SSN%';