Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle字符串搜索相关查询以查找与搜索匹配的用户名?_Sql_Database_Oracle - Fatal编程技术网

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

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

我对SQL有点陌生。请帮助我编写一个简单的查询

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

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


请帮助我编写一个查询,以在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, '[^\\]+$')));