【问题标题】:Oracle SQL SUBSTR functionOracle SQL SUBSTR 函数
【发布时间】:2013-08-28 16:39:31
【问题描述】:

我有一张如下表:

Last_name First_name
aaaa       bbb -
aaa        bbbb -
aaa        gggg j

如何使用 substr 函数删除 first_name 中的 - 并保留不是 - 的字母?

谢谢

【问题讨论】:

    标签: sql oracle substr


    【解决方案1】:

    您可以使用rtrim() 函数,将要从字符串右侧删除的字符指定为第二个参数:

    SQL> with t1(Last_name, First_name) as(
      2    select 'aaaa',  'bbb -' from dual union all
      3    select 'aaa',   'bbbb -' from dual union all
      4    select 'aaa',   'gggg j' from dual
      5  )
      6  select last_name
      7       , rtrim(first_name, ' -') as first_name
      8    from t1
      9  ;
    

    结果:

    LAST_NAME FIRST_NAME
    --------- ----------
    aaaa      bbb
    aaa       bbbb
    aaa       gggg j
    

    从Oracle 10g版本开始,还可以使用regexp_replace()正则表达式函数:

    select last_name
         , regexp_replace(first_name, '\s*-\s*$') as first_name
      from t1
    

    结果:

    LAST_NAME FIRST_NAME
    --------- ----------
    aaaa      bbb
    aaa       bbbb
    aaa       gggg j
    

    【讨论】:

    • 效果很好。非常感谢!
    【解决方案2】:

    如果你真的想使用 SUBSTR,试试这个:

    with t1(Last_name, First_name) as(
      select 'aaaa',  'bbb -' from dual union all
      select 'aaa',   'bbbb -' from dual union all
      select 'aaa',   'gggg j' from dual
    )
    select last_name
        , substr(first_name, 1, decode(instr(first_name,' -'), 0, length(first_name), instr(first_name,' -') -1)) as first_name
      from t1
    ;
    

    结果:

    LAST_NAME FIRST_NAME
    --------- ----------
    aaaa      bbb
    aaa       bbbb
    aaa       gggg j
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2013-07-30
      • 2018-07-11
      • 2021-01-28
      • 2020-10-07
      相关资源
      最近更新 更多