在第三个之前提取文本 - 在SQL中使用“Dash”

时间:2010-12-08 00:38:25

标签: sql oracle

请帮助获取sql的这段代码。

我的列名称INFO_01包含类似的信息 D10-52247-479-245 HALL SO 我想只提取 D10-52247-479

如果你看到我想要在第三个“ - ”Dash之前的部分文本。

由于 LD

4 个答案:

答案 0 :(得分:1)

您需要获取第三个破折号的位置(使用instr)然后使用substr来获取字符串的必要部分。

with temp as (
    select 'D10-52247-479-245 HALL SO' test_string from dual)
select test_string,
       instr(test_string,1,3) third_dash,
       substr(test_string,1,instr(test_string,1,3)-1) result
  from temp
);

答案 1 :(得分:1)

这是一个应该有效的简单陈述:

SELECT SUBSTR(column, 1, INSTR(column,'-',1,3) ) FROM table;

答案 2 :(得分:0)

我正在假设MySQL,如果我错了,请告诉我。但是使用SUBSTRING_INDEX可以执行以下操作:

SELECT SUBSTRING_INDEX(column, '-', 3)

修改 似乎是甲骨文。看起来我们可能不得不诉诸REGEXP_SUBSTR

SELECT REGEXP_SUBSTR(column, '^((?.*\-){2}[^\-]*)')

无法测试,所以不确定会有什么样的结果...

答案 3 :(得分:0)

使用SUBSTR和INSTR的组合将返回您想要的内容:

SELECT SUBSTR('D10-52247-479-245', 0, INSTR('D10-52247-479-245', '-', -1, 1)-1) AS output
  FROM DUAL

结果:

output
-------------
D10-52247-479

使用:

SELECT SUBSTR(t.column, 0, INSTR(t.column, '-', -1, 1)-1) AS output
  FROM YOUR_TABLE t

参考:

附录

如果使用Oracle10g +,您可以通过REGEXP_SUBSTR使用正则表达式。