为什么包含某些字母的 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%';
我有关注 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%';