如何在不使用LIKE的情况下检查Oracle中字符串中的子字符串?假设我要从表中选择姓氏中包含字母"z"的所有用户:
SELECT * FROM users WHERE last_name LIKE "%z%";
Run Code Online (Sandbox Code Playgroud)
这会有效,但我不想使用LIKE.我可以使用其他功能吗?
如果您只对'z'感兴趣,则可以创建基于函数的索引.
CREATE INDEX users_z_idx ON users (INSTR(last_name,'z'))
Run Code Online (Sandbox Code Playgroud)
然后你的查询将使用WHERE INSTR(last_name,'z') > 0.
使用此方法,您必须为可能要搜索的每个字符创建单独的索引.我想如果你经常这样做,那么为每个字母创建一个索引可能是值得的.
另外,请记住,如果您的数据的名称以标准方式大写(例如,"Zaxxon"),那么您的示例和我的示例都不会与以Z开头的名称匹配.您可以通过包含LOWER来纠正此问题.搜索表达式: INSTR(LOWER(last_name),'z').
您可以使用INSTR这样做:
SELECT * FROM users WHERE INSTR(LOWER(last_name), 'z') > 0;
Run Code Online (Sandbox Code Playgroud)
如果子字符串不在字符串中,则INSTR返回零.
出于兴趣,你为什么不想使用?
编辑:我冒昧地使搜索案例不敏感,所以你不要错过Bob Zebidee.:-)
| 归档时间: |
|
| 查看次数: |
99838 次 |
| 最近记录: |