我有一個三數據庫應用程序(我自己開發的),其中存儲了許多電話號碼,但它們的格式不一致(555-5555,(555)555-5555,5555555555,5555555,等等)在網絡方面,我希望他們總是像555-555-5555一樣顯示。我寫了一個標量函數來清理它們,但它會被稱爲OFTEN,我擔心它的效率。SQL標量函數的效率
你可以看看,如果有更好的方法,請告訴我。
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
謝謝! Nick。
一種http://codereview.stackexchange.com/問題嗎? –
是的,使用循環會降低效率。我不是這方面的專家,但是使用服務器端功能簡單地從電話號碼中去掉所有非數字,然後在Web應用程序中格式化結果呢? –