繁体   English   中英

Oracle字符串搜索相关查询,以查找与搜索匹配的用户名?

[英]Oracle string search related query to find user names that matches search?

我对SQL有点陌生,可以帮助我编写一个简单的查询

假设表名是“ Users”,下面的列名是“ DomainUser”

ac\jason_mirabello  
mac\jason_thompson  
nyc\jason_graham  
jdb\jason_bates  

我得到的用户名在“ \\”之后,因此我需要搜索用户名以查找用户是否存在,因此我需要排除域部分

帮助我编写查询以在oracle中实现以上目标

尝试使用like子句,如下所示:

SELECT * 
FROM Users
WHERE DomainUser LIKE '%jason_graham'

您可以使用LIKE运算子:

SELECT * FROM users
 WHERE domainuser LIKE '%\jason_graham';

但是我喜欢在这里使用正则表达式,以防反斜杠\\不存在:

SELECT * FROM users
 WHERE REGEXP_SUBSTR(domainuser, '[^\\]+$') = 'jason_graham';

上面两个查询的困难在于它们都不使用索引。 您可以做的是创建一个基于函数的索引,该索引可与后一个查询一起使用:

CREATE INDEX domainuser_un ON users (REGEXP_SUBSTR(domainuser, '[^\\]+$'));

假设您的用户名不区分大小写,那么使用LOWER()来使索引“不区分大小写”也可能会有所帮助(只需确保将搜索词也转换为小写!):

CREATE INDEX domainuser_un ON users (LOWER(REGEXP_SUBSTR(domainuser, '[^\\]+$')));

这是我使用的正则表达式的解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM