假设我在表中有一个列并且它有一些值,我需要一个SQL查询来返回特定字符之前的字符串
例如,如果列包含以下值
Col1
------------------
ABC_method ~~ AMQ
BCCCC_TEST ~~ POQ
AO ~~ OOO
输出应为
ABC_method
BCCCC_TEST
AO
答案 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