我正在尝试从列中获取标题之后的位置名称。职位名称的一个示例是“经理-迈阿密”。我正在尝试以下方法,
SELECT UPPER(LTRIM('Manager - Miami', 'Manager - ')) FROM DUAL
我期望输出为MIAMI
,但仅返回IAMI
。
答案 0 :(得分:3)
在Oracle中,LTRIM()
的第二个参数是字符列表。默认情况下,它们区分大小写。
因此,'m'
是''Manager - Miami'
中第一个字符,而不是'District Manager - '
中的字符,因此删除之前的所有内容。
我可以推测您实际上需要某种regexp_substr()
或regexp_replace()
,但是您并没有真正指定逻辑。
答案 1 :(得分:2)
(L)TRIM?为什么用它返回“迈阿密”?我将使用SUBSTR + INSTR,例如在这个示例中(CTE就是这样,我不必重复多次该字符串)。
SQL> with test (col) as
2 (select 'Manager - Miami' from dual)
3 select trim(substr(col, instr(col, '-') + 1)) result
4 from test;
RESUL
-----
Miami
SQL>
此外,District Manager -
的目的是什么?您是否也要从中选择位置?没有,所以-将返回NULL:
SQL> with test (col) as
2 (select 'District Manager - ' from dual)
3 select trim(substr(col, instr(col, '-') + 1)) result
4 from test;
R
-
SQL>
答案 2 :(得分:2)
这是regex_substr版本,它将选择字符串末尾的最后一个破折号/空格之后的内容:
SELECT REGEXP_SUBSTR('Manager - Miami', '- (.*)$', 1, 1, NULL, 1) FROM DUAL;