我有一个三库应用(没有一个是我开发的),里面存储了很多电话号码,但是它们的格式不一致(555-5555、(555)555-5555、5555555555、5555555等)在web端,我希望它们始终显示为 555-555-5555。我编写了一个标量函数来清理它们,但它会被称为 OFTEN,我担心它的效率。
你能看看,如果有更好的方法,请告诉我。
ALTER FUNCTION [dbo].[FormatPhone]
(
@p AS VARCHAR(20)
) RETURNS VARCHAR(12) AS
BEGIN
DECLARE @ret AS VARCHAR(12) = ''
DECLARE @c AS CHAR
DECLARE @i AS INT
DECLARE @stop AS INT
-- loop to grab only digits from @p
SET @i = 1
SET @stop = LEN(@p)
WHILE @i <= @stop
BEGIN
SET @c = SUBSTRING(@p, @i, 1)
IF @c >= '0' AND @c <= '9' SET @ret = @ret + @c
SET @i = @i + 1
END
IF LEN(@ret) = 7 SET @ret = '204' + @ret -- account for forgotten area code
SET @ret = LEFT(@ret, 3) + '-' + SUBSTRING(@ret, 4, 3) + '-' + RIGHT(@ret, 4)
RETURN @ret
谢谢!缺口。