从特定字符开始删除右侧的所有内容

时间:2015-05-12 16:56:31

标签: sql oracle

假设我的数据库有几个条目

2345
2532-1
2593-R2
2380
2013-E1

我如何修剪破折号右边的所有内容' - '包括破折号本身,同时保留所有数字?

2 个答案:

答案 0 :(得分:3)

您可以将substrinstr一起使用,但是您需要将第二个参数更改为substr,具体取决于该值是否具有短划线,您可以对案例执行此操作语句:

select substr(value, 1,
  case
    when instr(value, '-') > 0 then instr(value, '-') - 1
    else length(value)
  end)
from <your table>;

instr(value, '-')为您提供值中第一个-的位置,如果根本没有出现,则为零。如果它为零,那么你需要完整的字符串,所以你可以使用长度;否则你想要-之前的角色。或者,如果存在-,则只能执行子字符串,否则使用原始值,这可能有点整洁:

select case
    when instr(value, '-') > 0 then substr(value, 1, instr(value, '-') - 1)
    else value
  end
from <your table>;

快速演示样本值:

with t (value) as (
  select '2345' from dual
  union all select '2532-1' from dual
  union all select '2593-R2' from dual
  union all select '2380' from dual
  union all select '2013-E1' from dual
)
select value,
  case
    when instr(value, '-') > 0 then substr(value, 1, instr(value, '-') - 1)
    else value
  end
from t;

VALUE   CASEWHE
------- -------
2345    2345   
2532-1  2532   
2593-R2 2593   
2380    2380   
2013-E1 2013   

你甚至可以使用一个匹配第一个-的所有内容的正则表达式:

select regexp_substr(value, '[^-]*')
from <your table>

...但这可能会慢一些,但代码更短。

答案 1 :(得分:0)

首先,您可以通过INSTR找到破折号的位置。 然后使用SUBSTR从位置1到达破折号。

<button class="icon-left ion-information" ng-click="stationInfoButtonClick('+location.name+')"></button>