SE você puder alterar a tabela (supondo que seja SQL Server 2005 e acima), você pode adicionar uma coluna computada à sua tabela e persisti-la. Esta coluna pode conter uma representação "limpa" do seu campo "número de telefone".
Algo assim:
create function dbo.CleanPhone(@phone varchar(100))
returns varchar(100)
with schemabinding
as begin
return
replace(replace(replace(replace(replace(replace(@phone, ' ', ''),
'-', ''), '(', ''), ')', ''), '-', ''), '+', '')
end
e depois:
alter table (yourtable)
add cleanedPhone as dbo.CleanPhone(Phone) persisted
Agora, sua coluna "CleanedPhone" sempre conteria uma versão "limpa" do seu número de telefone - sempre algo como:555123456.
Como é um campo PERSISTED, você também não incorre em penalidade de desempenho ao consultar - o valor é criado e armazenado em sua tabela e está disponível como uma coluna normal.
Sobre isso, agora você pode consultar com bastante facilidade.
Marco