为什么LTRIM函数未返回预期结果

时间:2019-03-28 21:33:05

标签: sql oracle plsql

我正在尝试从列中获取标题之后的位置名称。职位名称的一个示例是“经理-迈阿密”。我正在尝试以下方法,

 SELECT UPPER(LTRIM('Manager - Miami', 'Manager - ')) FROM DUAL

我期望输出为MIAMI,但仅返回IAMI

3 个答案:

答案 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;