我正在尝试获取一个查询,我在字符出现之前从字符串中获取所有字符。
说我可以拥有以下字符串:
'123456,123456,123456'
'123456'
'123456,123456,123456,123456,123456,123456'
'123456,123456,123456,123456,123456,123456,123456'
现在我希望我的查询始终在逗号的第5个出现之前返回所有内容,
结果:
'123456,123456,123456'
'123456'
'123456,123456,123456,123456,123456'
'123456,123456,123456,123456,123456'
我一直在尝试使用某些substr或regex,但我无法理解这一点。
答案 0 :(得分:4)
INSTR函数正是你需要找到第n个子串的位置 - 参见出现参数。
获取字符串的一部分直到此位置使用SUBSTRING。 为避免没有第N个符号的情况,请使用NVL(或COALESCE)。
例如(用N替换5并插入列):
SELECT NVL(
SUBSTR(YOUR_COLUMN, 1,
INSTR(YOUR_COLUMN,',',1,5) -1),
YOUR_COLUMN)
FROM YOUR_TABLE;
答案 1 :(得分:0)
你可以这样做:
define string_value='123456,123456';
select CASE
WHEN (length('&string_value') - length(replace('&string_value',',',null))) >=5
THEN SUBSTR('&string_value',0,INSTR('&string_value',',',1,5)-1)
ELSE '&string_value'
END as output
from dual;
输出:
123456,123456
define string_value='123456,123456,123456,123456,123456,123456';
select CASE
WHEN (length('&string_value') - length(replace('&string_value',',',null))) >=5
THEN SUBSTR('&string_value',0,INSTR('&string_value',',',1,5)-1)
ELSE '&string_value'
END as output
from dual;
输出:
123456,123456,123456,123456,123456
如果逗号之间的字符数不总是相同,这将起作用。