我不知道为什么我得空字符串作为结果,当我especting东西完全别的...... 我用微调功能,从切串电话号码:奇怪的微调功能行为
select trim(leading '509960405' from '509960405509960404');
为什么预期结果不是509960404?
我不知道为什么我得空字符串作为结果,当我especting东西完全别的...... 我用微调功能,从切串电话号码:奇怪的微调功能行为
select trim(leading '509960405' from '509960405509960404');
为什么预期结果不是509960404?
trim
去掉任何匹配字符列表的字符。字符串中的所有字符都在您的“领先”字符列表中。你所写的也很容易被写成
select trim(leading '04569' from '509960405509960404');
它从字符串的开头删除任何0,4,5,6或9个字符。由于您的字符串只包含0,4,5,6或9个字符,因此将其全部删除。
@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()
快,但提供了丰富的选项。
还有其他方法,这取决于您的确切(秘密)要求。
thx,Erwin。替换正是我在这种情况下需要的。我的工作是在许多字符串(是,字符串;)中查找和剪切所有出现的电话号码,因为我即将清理的数据是一个大混乱。因此,如果有人在一个字段中多次输入一个数字,我只能返回一个数字并将其复制到其他地方。整个和正确的数字(有适当的前缀)gonnna是同一个字符串中另一个数字的一部分的概率非常低,所以我认为这是做这件事的好方法。 – Borys 2013-05-02 18:21:18
结果是什么? – 2013-04-30 16:41:32
尝试使用'ltrim'。 http://www.postgresql.org/docs/8.1/static/functions-string.html – 2013-04-30 16:43:17
@罗伯特 - 这没什么... – Borys 2013-04-30 16:43:54