请帮助获取sql的这段代码。
我的列名称INFO_01包含类似的信息 D10-52247-479-245 HALL SO 我想只提取 D10-52247-479
如果你看到我想要在第三个“ - ”Dash之前的部分文本。
由于 LD
答案 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使用正则表达式。