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

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

我有点新手SQL帮我写一个简单的查询

假设 table 名称是 "Users" 并且下面的列名称是 "DomainUser"

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

我得到了'\'后面的用户名 所以我需要搜索用户名以查找用户是否存在,所以我需要排除域部分

帮我写一个查询来在 oracle 中实现上面的内容

尝试使用如下类似的子句:

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() 也可能会有帮助,这样索引就是 "case-insensitive"(只需确保将搜索词也转换为小写!)- 假设您的用户名不区分大小写:

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

Here is an explanation of the regular expression I used.