首次出现字符后剪切字符串

时间:2015-04-08 18:41:47

标签: sql string postgresql pattern-matching delimiter

我有像'keepme:cutme'或'string-without-separator'这样的字符串,它们应分别成为'keepme'和'string-without-separator'。这可以在PostgreSQL中完成吗?我试过了:

select substring('first:last' from '.+:')

但是如果字符串中没有:,则会留下:并且无效。

3 个答案:

答案 0 :(得分:17)

使用split_part()

SELECT split_part('first:last', ':', 1) AS first_part

如果分隔符不存在,则返回整个字符串。获得第二或第三部分等很简单。

比使用正则表达式匹配的函数快得多。由于我们有一个固定的分隔符,我们不需要正则表达式的魔力。

相关:

答案 1 :(得分:1)

regexp_replace()可能会超出您的需要,但它也提供了 regex 的额外好处。例如,如果字符串使用多个分隔符。

使用示例:

select regexp_replace( 'first:last', E':.*', '');

答案 2 :(得分:-1)

SQL选择在最后一次出现字符后选择所有内容

select right('first:last', charindex(':', reverse('first:last')) - 1)