多くの電話番号が保存されている 3 つのデータベース アプリケーション (私が開発したものはありません) がありますが、その形式は一貫していません (555-5555、(555) 555-5555、5555555555、5555555 など)。常に 555-555-5555 のように表示してほしい。それらをクリーンアップするためにスカラー関数を作成しましたが、頻繁に呼び出されることになり、その効率が心配です。
ご覧になり、より良い方法があれば教えてください。
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
ありがとう!ニック。