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

Display the specific part of the string in PostgreSQL 9.3

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

例如:

给定的字符串是:

str1 varchar = '123,456,789';

我想将字符串显示为:

'456,789'

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

在SQL服务器中我使用了STUFF()函数。

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

结果:

456,789

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

你可以使用正则表达式:

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;

您可以先将字符串转为数组,然后 return 第二个和第三个单元格:

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

或者您可以将子字符串函数与正则表达式(模式匹配)结合使用:

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

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

您的 SQL 服务器示例表明您只想 删除前 4 个字符 ,这使您的问题的其余部分看起来具有误导性,因为它完全忽略了其中的内容字符串。只有位置很重要。

尽管如此,切断前导字符的简单而廉价的方法是 right():

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

SQL Fiddle.