2013-04-30 103 views
0

我不知道爲什麼我得空字符串作爲結果,當我especting東西完全別的...... 我用微調功能,從切串電話號碼:奇怪的微調功能行爲

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

爲什麼預期結果不是509960404?

+0

結果是什麼? – 2013-04-30 16:41:32

+0

嘗試使用'ltrim'。 http://www.postgresql.org/docs/8.1/static/functions-string.html – 2013-04-30 16:43:17

+0

@羅伯特 - 這沒什麼... – Borys 2013-04-30 16:43:54

回答

2

trim去掉任何匹配字符列表的字符。字符串中的所有字符都在您的「領先」字符列表中。你所寫的也很容易被寫成

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

它從字符串的開頭刪除任何0,4,5,6或9個字符。由於您的字符串只包含0,4,5,6或9個字符,因此將其全部刪除。

+0

所以爲什麼當我這樣做時選擇修剪('50''509960405509960404');其結果是:09960405509960404? – Borys 2013-04-30 16:45:23

+1

因爲它從頭開始刪除了5。在這種情況下,你的角色列表中只有一個唯一的字符,'5',並且在字符串的開頭只有一個'5'。您應該嘗試閱讀功能的文檔,然後抱怨它沒有正常工作。 – 2013-04-30 16:47:03

+0

我紅色的文檔,我仍然不知道爲什麼它從內部削減數字,雖然它不匹配。 – Borys 2013-04-30 16:50:04

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()快,但提供了豐富的選項。
還有其他方法,這取決於您的確切(祕密)要求。

+0

thx,Erwin。替換正是我在這種情況下需要的。我的工作是在許多字符串(是,字符串;)中查找和剪切所有出現的電話號碼,因爲我即將清理的數據是一個大混亂。因此,如果有人在一個字段中多次輸入一個數字,我只能返回一個數字並將其複製到其他地方。整個和正確的數字(有適當的前綴)gonnna是同一個字符串中另一個數字的一​​部分的概率非常低,所以我認爲這是做這件事的好方法。 – Borys 2013-05-02 18:21:18