小编典典

用空字符串替换MSSQL中的所有非数字字符

sql

我当前的MSSQL表有一个“电话”列,它是一个varchar。不幸的是,数据库中已经存在的电话号码不是标准格式。例如888-888-8888或888/888/8888或(888)8888888或8888888888。

我想获取所有等同于88888888的行,即它应与888-888-8888,(888)888888等匹配。

我尝试使用REPLACE(),但是在某些行中,条目具有其他字母字符,例如“ e”,“ ex”,“ ext”等。因此,我想替换所有非数字字符。

使用MSSQL查询获取“匹配”行的最佳方法是什么?


阅读 284

收藏
2021-04-22

共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'])) {
    ..
}
2021-04-22