使用 PHP SQLSRV 驱动程序连接到 SQL Server 2000,有没有一种方法可以使用以下数据匹配所有这些行:5553442524?
555-344-2524
(555) 344-2524
555.344.2524
1-555-344-2524
我想这将通过可能使用存储过程的特定查询来完成?
谢谢你。
使用 PHP SQLSRV 驱动程序连接到 SQL Server 2000,有没有一种方法可以使用以下数据匹配所有这些行:5553442524?
555-344-2524
(555) 344-2524
555.344.2524
1-555-344-2524
我想这将通过可能使用存储过程的特定查询来完成?
谢谢你。
对于 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
显然,这里最好的办法是清理存储在列中的数据,并限制插入任何进一步的“坏”数据。虽然根据我的经验,说起来容易做起来难。