2011-09-23 260 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']); 
} 
相关问题