2011-09-23 258 views
2

我當前的MSSQL表有一個「phone」列,它是一個varchar。不幸的是,已經在數據庫中的電話號碼不是標準格式。例如,888-888-8888或888/888/8888或(888)8888888或8888888888.將MSSQL中的所有非數字字符替換爲空字符串

我想獲得所有等同於88888888的行,即它應該與888-888-8888匹配, (888)888888等

我試過使用REPLACE(),但有一些行的條目有其他字母字符如「e」,「ex」,「ext」等,所以我想全部替換非數字字符。

使用MSSQL查詢來獲得「匹配」行的最佳方式是什麼?

回答

1

使用MySQL一個簡單的版本:

SELECT * FROM `phones` WHERE `phone` LIKE '%8%8%8%8%8%8%8%8%8%8%' 

使用PHP:

// Get all your table rows into $rows using SELECT .. 
foreach ($rows as $row) { 
    $row['phone'] = preg_replace('/\D/', '', $row['phone']; 
    // Save the row using UPDATE .. 
} 

正則表達式匹配\D任何非數字字符。有關更多信息,請參閱php.net/preg_replace

如果你只是想找到一個匹配「8888888888」的行,那麼你可以使用:

if (preg_match('/\D*8\D*8\D*8\D*8\D*8\D*8\D*8\D*8\D*8\D*8\D*/', $row['phone'])) { 
    .. 
} 

這可以簡化/抽象:

$match = '8888888888'; 
if (preg_match('/' . preg_replace('/(\d)/', '\D*$1', $match) . '\D*/', $row['phone'])) { 
    .. 
} 
+0

我能做些什麼,而不必「更新」我的數據庫? – Ishwor

+0

那麼你想做什麼?將數據庫行從「888-888-8888」更改爲「8888888888」或找到與「8888888888」匹配的行?我編輯了我的答案,爲後者提供瞭解決方案。 –

+0

我在我的問題中寫了「PHP」,這是錯誤的。我希望一切都使用MSSQL查詢完成。我現在已經糾正了這個問題。抱歉。 – Ishwor

0

爲什麼不寫一個可以幫你做的php腳本?

ex。得到所有行 - >替換 - >更新

0

繼承人的查詢可能工作在MSSQL上。

create FUNCTION dbo.Only_Numbers 

(

    @string VARCHAR(8000) 
) 

RETURNS VARCHAR(8000) 
AS 

BEGIN 

DECLARE @IncorrectCharLoc SMALLINT 
SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string) 
WHILE @IncorrectCharLoc > 0 
BEGIN 
    SET @string = STUFF(@string, @IncorrectCharLoc, 1, '') 
    SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string) 
    END 
    SET @string = @string 
Return @string 
END 

GO 

select dbo.Only_Numbers('888*88-88/2') 
2

你可以試試這個功能(MS SQL服務器):

CREATE FUNCTION uf_RemoveNotNumbers (@str varchar(max)) 
RETURNS varchar(max) 
AS 
BEGIN 
    WHILE @str LIKE '%[^0-9]%' 
    SET @str=replace(@str, substring(@str, patindex('%[^0-9]%',@str),1),''); 
    RETURN @str 
END 

GO 

DECLARE @str varchar(max); 
SET @str = 'q56--89+9*67qweresr'; 
select dbo.uf_RemoveNotNumbers (@str) 
0

你可以試試這個代碼:

$query="select * from tablename"; 

$result=mysql_query($query); 

while($row=mysql_fetch_array($result)) 
{ 
    $str = preg_replace('[\D]', '', $row['phone']); 
} 
相關問題