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

时间:2015-01-26 12:50:57

标签: sql database oracle

我对SQL有点新意,帮我写一个简单的查询

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

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

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

帮我写一个查询来实现上面的oracle

2 个答案:

答案 0 :(得分:0)

尝试使用如下的like子句:

SELECT * 
FROM Users
WHERE DomainUser LIKE '%jason_graham'

答案 1 :(得分:0)

您可以使用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()也可能有帮助,以便索引“不区分大小写”(只需确保将搜索词转换为小写!) - 假设您的用户名不区分大小写:< / p>

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

Here is an explanation of the regular expression I used.