[英]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.