我想知道为什么当我完全怀疑其他东西时,我的字符串是空的... 我使用trim功能从字符串中删除电话号码:
select trim(leading '509960405' from '509960405509960404');
为什么结果不是预期的509960404?
答案 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()
那么快,但提供了丰富的选项
还有其他方法,具体取决于您的确切(秘密)要求。