3

嗨,这是我的第一篇文章,我也是 sql 新手。我正在尝试从字符串中提取文本

我有一个看起来像这样的表格列

site - abc - left
site - def - left
site - ghi - right - inner
site - jkl - right - inner
site - mno
site - pqr

我需要一个查询,它会在前两个“-”之间返回文本,但根据示例,有些只有一个“-”。

例如。

abc
def
ghi
jkl
mno
pqr

任何帮助都被广泛接受

我一直在使用的代码只给了我第一列“站点”。

SELECT SUBSTR(site.description,1,instr(site.description,'-',1,1)-1) AS loc
FROM table

4

2 回答 2

3

假设您的数据位于名为 test_n 的表中,其中只有列 val 具有上述值,如您的问题中所述,查询是:

select val
     , instr(val, '-', 1,1) + 1 START_POS
     , instr(val, '-',1,2) END_POS
     , substr(val, instr(val, '-', 1,1) + 1, decode(instr(val, '-',1,2),0,length(val)+1,instr(val, '-',1,2) ) - instr(val, '-', 1,1)-1 ) result
FROM test_n;
于 2015-07-28T18:49:10.127 回答
0

我还没有检查,但我认为这对你有用

substr(var1,1,instr(site.description,'-',1,1)+1-instr(site.description,'-',1,2)-1)

它应该可以工作,如果它不只是需要一点改变。让我知道结果

于 2014-04-26T05:35:07.820 回答