0

使用 PHP SQLSRV 驱动程序连接到 SQL Server 2000,有没有一种方法可以使用以下数据匹配所有这些行:5553442524

555-344-2524
(555) 344-2524
555.344.2524
1-555-344-2524

我想这将通过可能使用存储过程的特定查询来完成?

谢谢你。

4

1 回答 1

5

对于 SQL 2000,我能想到的唯一方法是使用该REPLACE函数。

declare @SearchTerm bigint

Set @SearchTerm = 5553442524

Select * From dbo.Table 
Where Replace(Replace(Replace(Replace(Col1,'-',''), '(',''),')',''),'.','')
= @SearchTerm

这样做的问题是它不能满足领先的 1。

更好的方法是将所有这些逻辑包装到一个函数中。

例如

Create Function dbo.fn_FormatTelephoneNumber(@input varchar(100))
returns bigint
as begin


declare @temp bigint

Set @temp = Replace(Replace(Replace(Replace(@input ,'-',''), '(',''),')',''),'.','')

If Len(@temp) = 11
begin
Set @temp = Right(@temp, 10)
end

return @temp

End

要调用该函数,您可以像这样使用它:

Select *,
      dbo.fn_FormatTelephoneNumber(YourColumnName) as [FormattedTelephoneNumber]
From dbo.YourTable

或者在WHERE子句中使用它:

Select *
From dbo.YourTable
Where dbo.fn_FormatTelephoneNumber(YourColumnName) = 5553442524

显然,这里最好的办法是清理存储在列中的数据,并限制插入任何进一步的“坏”数据。虽然根据我的经验,说起来容易做起来难。

于 2013-06-20T15:15:47.463 回答