如何获取子字符串直到第 2 次出现分隔符

Posted

技术标签:

【中文标题】如何获取子字符串直到第 2 次出现分隔符【英文标题】:How to get sub string till 2nd occurence of delimiter 【发布时间】:2020-02-25 14:05:26 【问题描述】:

我正在尝试获取子字符串,直到第 2 次出现分隔符,但有些无法正常工作。我关注了几个***链接:

SQL Server - find nth occurrence in a string

这是我数据库中的列:

this+is+my
never+ending+movie
hello

需要的输出

this+is
never+ending
hello

我试过了:

charindex('+', col1, (charindex('+', col1, 1))+1)

错误:SQL 错误 [500310] [42883]:Amazon 无效操作:函数 charindex("unknown", character varying, integer) 不存在;

我正在使用 Amzaon Redshift 数据库和 Dbeaver 进行连接。

【问题讨论】:

部分问题是您尝试将 SQL Server 解决方案应用于 Redshift 问题,并且两个数据库以不同方式实现 CHARINDEX,如错误消息中所示。 Redshift 版本不包含 SQL Server 代码试图增加的第三个参数。 【参考方案1】:

您可以使用SPLIT_PART

select split_part(col1,'+',1) || '+' || split_part(col1,'+',2) as string_value
from table_name;

【讨论】:

【参考方案2】:

您可以使用leftCharindex,尝试关注

declare @S varchar(20) = 'this+problem+is+fixedby+Girish';
select left(@S, charindex('+', @S, charindex('+', @S)+1)-1) as Result;

这里是dbfiddle

在你的情况下:-

select left(columnname, charindex('+', columnname, charindex('+', @S)+1)-1) from your table as Result;

【讨论】:

以上是关于如何获取子字符串直到第 2 次出现分隔符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 2 个不同的模式获取第 n 次出现之间的所有字符串

如何在 Python 中获取字符串的子字符串?

如何在 DB2 中获取字符分隔的子字符串?

获取两个不同的开始和结束分隔符之间的所有子字符串

Oracle如何获取逗号分隔字符串中的出现次数

如何返回最后一个字符出现的位置?