查询在特定字符之前返回字符串

时间:2017-04-27 14:07:54

标签: sql oracle

假设我在表中有一个列并且它有一些值,我需要一个SQL查询来返回特定字符之前的字符串

例如,如果列包含以下值

Col1
------------------
ABC_method ~~ AMQ
BCCCC_TEST ~~ POQ
AO ~~ OOO

输出应为

ABC_method
BCCCC_TEST
AO

4 个答案:

答案 0 :(得分:1)

使用正则表达式,您可以使用:

select regexp_substr(Col1, '[^~]*')
from test

但你不需要正则表达式;你甚至可以使用:

select case
        when instr(Col1, '~') > 0 then substr(Col1, 1, instr(Col1, '~')-1)
        else Col1
       end
from test

regexp方法更紧凑,但速度更慢。

如果您确定每个字符串至少出现一次分隔符(在您的示例中为~),则可以避免使用case

select substr(Col1, 1, instr(Col1, '~')-1)       
from test

答案 1 :(得分:0)

Substr和Instr:

{{1}}

答案 2 :(得分:0)

这包括找到一个起始点,如果它不在第一位。您可能需要修改优缺点以适应。

select substr(Col1, startnum, endnum - startnum) as myoutput
from
(select instr(Col1, 'something')+ 1 startnum,
       instr(Col1, '~~') -1  as endnum,
       Col1
from tablenamehere) getnums;

答案 3 :(得分:-1)

SELECT CASE
         WHEN col1 like 'AMQ' THEN
          'ABC_method'
         WHEN col1 like 'POQ' THEN
          'BCCCC_TEST'
         ELSE
          'AO'
       END as type
FROM table t