奇怪的修剪功能行为

时间:2013-04-30 16:40:13

标签: string postgresql trim postgresql-9.2

我想知道为什么当我完全怀疑其他东西时,我的字符串是空的... 我使用trim功能从字符串中删除电话号码:

select trim(leading  '509960405' from '509960405509960404');

为什么结果不是预期的509960404?

2 个答案:

答案 0 :(得分:2)

trim删除与字符列表匹配的任何字符。字符串中的所有字符都在“前导”字符列表中。你所写的内容可以像

一样容易地写出来

select trim(leading '04569' from '509960405509960404');

它会从字符串的开头删除任何0,4,5,6或9个字符。由于您的字符串仅包含0个,4个,5个,6个或9个字符,因此将其全部删除。

答案 1 :(得分:2)

@Paul澄清了trim()的行为 您在评论中提供的解决方案可能奸诈

SELECT replace('509960405509960404','509960405','')

替换所有次出现的'509960405'而不仅仅是第一次出现。例如:

SELECT replace('509960405509960404','50996040' ,'');

54中的结果。我怀疑你想要的是 从字符串开头删除模式的一般流行方法是使用regular expressions。您可以在Postgres中使用regexp_replace()

SELECT regexp_replace('509960405509960404','^509960405' ,'');

^ ..将模式粘贴到字符串的开头(“左锚定”) regexp_replace()并不像简单replace()那么快,但提供了丰富的选项 还有其他方法,具体取决于您的确切(秘密)要求。