首页 > 解决方案 > 通配符搜索的工作与预期相反,我是否错误地编写了查询?

问题描述

我有以下查询。我正在寻找我的数据库中包含短语“ssn”的任何表。它应该包括“SSN”。由于我使用的是 LIKE 运算符和 % 通配符,我希望诸如“Employee_SSN”、“Spouse SSN”、“ssn”之类的术语会出现在查询结果中。然而事实并非如此。事实上,如果我不输入所有大写的 SSN,它将被拒绝。我不确定我是否不小心更改了其中一个设置或类似的设置,但这对我来说似乎是错误的。

select owner, table_name  from all_tab_columns  where column_name LIKE x

'%SSN%'

标签: sqloraclesql-like

解决方案


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%';

我们建议您不要使用区分大小写的列名,但如果这样做,您需要考虑这一点。

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

在此处输入图像描述

12c 第 2 版 (12.2) 还可以更轻松地处理搜索文本值。Oracle-Base 在这里有一个很好的方法。


推荐阅读