为什么包含某些字母的 SQL 查询的某些结果丢失了?

Why some of the results for SQL query containing certain alphabets are missing?

我有关注 table

当我 运行 查询时,它应该显示所有包含 's' 的教师姓名,但它没有。 我写的查询:

SQL> SELECT instructor_name
  2  FROM instructor
  3  WHERE instructor_name LIKE '%s%';

结果是:

这里有什么问题? Balbir Silakar 和 Saurav Pangeni 不应该也出现在结果上吗?

你的数据库(我认为默认情况下)是区分大小写的,因此LIKE匹配机制是区分大小写的。这些名称包含大写 S.

这里有一个关于如何使搜索不区分大小写的问答。

如果您的列具有区分大小写的排序规则,则

's''S' 是两个不同的东西。

唉,Oracle 没有提供不区分大小写的 like 版本(在其他数据库中通常称为 ilike)。

你可以这样做:

where instructor_name like '%s%' or instructor_name like '%S%' 

或:

where lower(instructor_name) like '%s%' 

或者,您可以使用 regexp_like();它需要第三个参数,可用于使搜索不区分大小写。

where regexp_like(instructor_name, 's', 'i')

如果正则表达式是三个选项中最快的选项,我不会感到惊讶。

对于不区分大小写的检查,请使用 regexp_like

where regexp_like(instructor_name , 's', 'i');

正如其他人提到的,s (chr(115)) 和 S (chr(83)) 是两个不同的东西,[=中没有 s 21=] 或 'Saurav Pangeni'.

从 Oracle 12.2 开始,您可以使用

where instructor_name collate binary_ci like '%s%';

您还可以忽略重音

where instructor_name collate binary_ai like '%s%';