Sql Oracle字符串搜索相关查询以查找与搜索匹配的用户名?
我对SQL有点陌生。请帮助我编写一个简单的查询 假设表名是“Users”,列名下面是“DomainUser” 我的用户名在“\”之后 所以我需要搜索用户名以查找是否存在用户,所以我需要排除域部分Sql Oracle字符串搜索相关查询以查找与搜索匹配的用户名?,sql,database,oracle,Sql,Database,Oracle,我对SQL有点陌生。请帮助我编写一个简单的查询 假设表名是“Users”,列名下面是“DomainUser” 我的用户名在“\”之后 所以我需要搜索用户名以查找是否存在用户,所以我需要排除域部分 请帮助我编写一个查询,以在oracle中实现上述功能尝试使用like子句,如下所示: SELECT * FROM Users WHERE DomainUser LIKE '%jason_graham' 您可以使用LIKE运算符: SELECT * FROM users WHERE domainus
请帮助我编写一个查询,以在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, '[^\\]+$')));
CREATE INDEX domainuser_un ON users (LOWER(REGEXP_SUBSTR(domainuser, '[^\\]+$')));