0

多くの電話番号が保存されている 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

ありがとう!ニック。

4

3 に答える 3

2

あなたが話しているのはデータクレンジングです。私の経験では (私はロシアのビジネス ユニットと 6 か月間プロジェクトを行っていましたが、電話番号の形式の問題で約 90% が壁にぶつかりました)、これは完全な苦痛です。

これに関する私のアドバイスは、一度実行して適切に実行することです。次に、システムを適切な場所に配置して、将来的にダーティ データがシステムに侵入するのを防ぎます。

私たちが最終的にやったのは、管理オフィスから数人の女の子に手作業でやってもらうことでした! 問題は、それを間違えるとデータが役に立たなくなることです。自動解析を試してみて、それがどこに到達するかを確認してください。

于 2013-04-12T14:13:08.623 に答える