2011-02-28 51 views
5

我想替換MySQL中VARCHAR字段中的所有非數字字符,因爲是一個電話表,在導入它們時,我發現了幾個不應該存在的「Fax:xxx」或「 - 」字符。如何替換MySQL中的非數字字符?

我寧願不是涉及多個替換解決方案()調用,

在此先感謝

回答

5

這是一個MySQL的函數:

delimiter // 

create function IF NOT EXISTS LeaveNumber(str varchar(50)) returns varchar(50) 
no sql 
begin 
declare verification varchar(50); 
declare result varchar(50) default ''; 
declare character varchar(2); 
declare i integer default 1; 

if char_length(str) > 0 then 
    while(i <= char_length(str)) do 
     set character = substring(str,i,1); 
     set verification = find_in_set(character,'1,2,3,4,5,6,7,8,9,0'); 

     if verification > 0 then 
      set result = concat(result,character); 
     end if; 

     set i = i + 1; 

    end while; 

return result; 
else 
return ''; 
end if; 
end // 


delimiter ; 

select leaveNumber('fAX:-12abcDE234'); -- RESULT: 12234 

使用它作爲您的更新查詢本地的MySQL函數。

+0

偉大的工作暱稱;)你保存了我的一天:) – 2012-01-26 23:09:31

+0

很高興我的功能幫助你。謝謝你的提升。 ;) – 2012-01-26 23:17:11

+0

只有portugeese(?)變量名稱非常混亂,試圖瞭解它是如何完成的:D – 2012-01-27 09:35:51

1

你最好的選擇可能是使用正則表達式替換UDF。我建議你看看this one,它有一個REGEX_REPLACE函數,可能適合你的需要。

你的正則表達式將可能只是看起來像這樣:

[^0-9] 
+0

你提供的鏈接已損壞:( – 2011-03-01 03:13:58

相關問題