我当前的MSSQL表有一个“电话”列,它是一个varchar。不幸的是,数据库中已经存在的电话号码不是标准格式。例如888-888-8888或888/888/8888或(888)8888888或8888888888。
我想获取所有等同于88888888的行,即它应与888-888-8888,(888)888888等匹配。
我尝试使用REPLACE(),但是在某些行中,条目具有其他字母字符,例如“ e”,“ ex”,“ ext”等。因此,我想替换所有非数字字符。
使用MSSQL查询获取“匹配”行的最佳方法是什么?
一个使用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。
\D
如果您只想查找与“ 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'])) { .. }