在PostgreSQL 9.3中显示字符串的特定部分

时间:2015-02-20 05:44:38

标签: string postgresql postgresql-9.3

我有一个要根据要求修改的字符串。

例如:

给定的字符串是:

str1 varchar = '123,456,789';

我想将字符串显示为:

'456,789'

注意:用逗号分隔第一部分(分隔),我想从字符串中删除并显示字符串的其余部分。

在SQL Server中,我使用了STUFF()函数。

SELECT STUFF('123,456,789',1,4,'');

结果:

456,789

问题:PostgreSQL 9.3版本中是否有任何字符串函数可以完成同样的工作?

3 个答案:

答案 0 :(得分:2)

你可以使用正则表达式:

select substring('123,456,789' from ',(.*)$');

逗号匹配字符串中找到的第一个逗号。括号内的部分(。*)从函数返回。符号$表示字符串的结尾。

没有正则表达式的替代解决方案:

select str, substring(str from position(',' in str)+1 for length(str)) from 
(select '123,456,789'::text as str) as foo;

答案 1 :(得分:1)

您可以先将字符串转换为数组并返回第二个和第三个单元格:

select array_to_string((regexp_split_to_array('123,456,789', ','))[2:3], ',')

或者您可以将substring-function与正则表达式(模式匹配)一起使用:

SELECT substring('123,456,789' from '[0-9]+,([0-9]+,[0-9]+)')
  • [0-9] +表示一个或多个数字
  • 括号告诉从字符串
  • 返回该部分

两种解决方案都适用于您的特定字符串。

答案 2 :(得分:1)

您的SQL Server示例表明您只想删除前4个字符,这使得您的问题的其余部分似乎具有误导性,因为它完全忽略了字符串中的内容。只有这些职位很重要。

尽管如此,切断主角的简单而廉价的方法是使用right()

SELECT right('123,456,789', -4);

SQL Fiddle.