在 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);
我有一个字符串要根据要求修改。
例如:
给定的字符串是:
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);