删除Oracle中用户名的未命中
我有一个查询,我想从删除Oracle中用户名的未命中,oracle,Oracle,我有一个查询,我想从用户名 我尝试了下面的查询 SELECT 0 user_id, '--- Select ---' user_name FROM DUAL UNION SELECT DISTINCT user_id, LTRIM (user_name) user_name FROM xxcus.xxacl_pn_user_det_v ORDER BY user_name 但它仍然不适合我 这是截图 您可以使用以下函数 REPLACE(user_
用户名
我尝试了下面的查询
SELECT 0 user_id, '--- Select ---' user_name
FROM DUAL
UNION
SELECT DISTINCT user_id, LTRIM (user_name) user_name
FROM xxcus.xxacl_pn_user_det_v
ORDER BY user_name
但它仍然不适合我
这是截图
您可以使用以下函数
REPLACE(user_name,'MISS','') as user_name
您可以使用如下函数
REPLACE(user_name,'MISS','') as user_name
如果有几个可能要删除的前缀,可以使用
regexp\u replace()
:
^
将搜索锚定在字符串的开头,(…|…|…)
表示匹配括号中的任何选项,\s
是一个空格\s*
表示零个或多个连续空格。从每个字符串开头删除的所有内容。点
必须用退格转义(否则它代表“任何单个字符”)
如果需要不区分大小写的匹配,如果除了Miss
之外还可能有Miss
,请使用regexp\u replace
的完整语法
编辑:还有一件事。。。从左到右逐个尝试备选方案,并使用第一个匹配项。因此
MS\.
应出现在MS
之前,否则MS
(无点)将匹配MS
中的MS
,这将在字符串开头留下点和空格。我必须在解决方案中更正此问题。如果您有几个可能要删除的前缀,可以使用regexp\u replace()
:
^
将搜索锚定在字符串的开头,(…|…|…)
表示匹配括号中的任何选项,\s
是一个空格\s*
表示零个或多个连续空格。从每个字符串开头删除的所有内容。点
必须用退格转义(否则它代表“任何单个字符”)
如果需要不区分大小写的匹配,如果除了Miss
之外还可能有Miss
,请使用regexp\u replace
的完整语法
编辑:还有一件事。。。从左到右逐个尝试备选方案,并使用第一个匹配项。因此
MS\.
应出现在MS
之前,否则MS
(无点)将匹配MS
中的MS
,这将在字符串开头留下点和空格。我必须在解决方案中纠正这一点。如果您有类似于(mr | mrs | other)/空格的列结构/username,您可以尝试此方法
with users(user_name) as
(select 'mr user name1' from dual union all
select 'miss username2 ' from dual union all
select 'other username 3' from dual )
select substr(user_name,instr(user_name,' ')+1) real_username from users
输出
REAL_USERNAME
----------------
user name1
username2
username 3
它substr
来自第一个创建的空格符号
在你的询问中
SELECT 0 user_id, '--- Select ---' user_name
FROM DUAL
UNION
SELECT DISTINCT user_id, substr(user_name,instr(user_name,' ')+1) user_name
FROM xxcus.xxacl_pn_user_det_v
ORDER BY user_name
如果您想要---选择---从顶部开始,您可以:
select user_id, user_name
from (
SELECT 0 user_id, '--- Select ---' user_name, 1 order_by
FROM DUAL
UNION
SELECT DISTINCT user_id, substr(user_name,instr(user_name,' ')+1) user_name, 2 order_by
FROM xxcus.xxacl_pn_user_det_v
)
ORDER BY order_by, user_name
如果您有类似于(mr | mrs | other)/space/username的列结构,您可以尝试以下方法
with users(user_name) as
(select 'mr user name1' from dual union all
select 'miss username2 ' from dual union all
select 'other username 3' from dual )
select substr(user_name,instr(user_name,' ')+1) real_username from users
输出
REAL_USERNAME
----------------
user name1
username2
username 3
它substr
来自第一个创建的空格符号
在你的询问中
SELECT 0 user_id, '--- Select ---' user_name
FROM DUAL
UNION
SELECT DISTINCT user_id, substr(user_name,instr(user_name,' ')+1) user_name
FROM xxcus.xxacl_pn_user_det_v
ORDER BY user_name
如果您想要---选择---从顶部开始,您可以:
select user_id, user_name
from (
SELECT 0 user_id, '--- Select ---' user_name, 1 order_by
FROM DUAL
UNION
SELECT DISTINCT user_id, substr(user_name,instr(user_name,' ')+1) user_name, 2 order_by
FROM xxcus.xxacl_pn_user_det_v
)
ORDER BY order_by, user_name
我有,
miss
,mr
,mrs
。这里有很多东西。我怎么能使用这些呢?@stack,但你的问题中缺少这些信息。顺便说一句,你仍然可以递归地替换它们。我知道,但我提到了两个miss,yes先生让我知道如何使用它们?@stack,比如replace(replace(用户名,'miss','','mr','')
这里有一件事,我的,——选择---
miss
mr
,mrs
。这里有很多东西。我怎么能使用这些呢?@stack,但你的问题中缺少这些信息。顺便说一句,你仍然可以递归地替换它们。我知道,但我提到了两个miss,yes先生让我知道如何使用它们?@stack,比如replace(replace(用户名,'miss','','mr','')
这里有一件事,我的<代码>---选择---并没有在我的queryOracle公司拥有的MySQL服务器上占据领先地位,但它与他们的旗舰Oracle数据库完全不同。我已经删除了问号。Oracle公司拥有MySQL服务器,但它与他们的旗舰Oracle数据库完全不同。我已经删除了问号。这里有一件事,我的---Select---
没有在我的问题的顶部。我不明白。这是什么意思?我的--选择--
应该在顶部。但是现在它是这样来的,这与从字符串的开头删除MISS有什么关系?这是一个不同的,无关的问题,关于订单管理;如果你对此有疑问,请单独发布。如果你想删除可选的句号,只需将其设置为可选一次:^(MISS | MS | MRS | MR)\。\s*
。有一件事,我的---Select---
不会在我的问题上占上风,我不明白。这是什么意思?我的--选择--
应该在顶部。但是现在它是这样来的,这与从字符串的开头删除MISS有什么关系?这是一个不同的,无关的问题,关于订单管理;如果您对此有疑问,请单独发布。如果您想删除可选的句号,只需将其设置为可选一次:^(MISS | MS | MRS | MR)\。\s*
。您正在硬编码所有以us
开头的名称?这与OP的示例数据不匹配。lol那么您应该知道为什么这个解决方案不起作用。“other username 3”不是以MISS或MR等开头的-您只是删除了“other”,它可能是名称的一部分,而不是前缀。在OP示例中,所有行都从real_username之前的某个单词开始。回答有关顺序的无关问题。。。您不需要在order by
中添加列,只需在order by
子句本身中有一个大小写
表达式即可。不过,我会等OP单独问这个问题,因为它与原始问题完全无关。@mathguy,很多答案可能是,我想是这样,但你在想另一个问题。我很高兴你有