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, '[^\]+$')));
我有点新手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, '[^\]+$')));