2

40 ~ 50 列のすべての varchar 列を持つテーブルがあり、それらのデータに従ってトリムしてクレンジングを行いたいと考えています。(一部の列には数値データと日付データが含まれる場合があります)。

各列の個々の更新を書き留めるのが面倒だったので、ユーザー定義関数を作成しました。

列名と識別子 (DataType) を渡すと、「強化された」値が返されます。

したがって、1回の更新で、私は書きます

UPDATE TABLE
SET
column1 = function(column1, datatype)
column2 = function(column2, datatype)
WHERE <my filter condition>.

ただし、これは遅いです。もっといい方法がないか考え中です。

関数は次のとおりです。

    create function [dbo].[fn_Polaris_EnrichColumnToTargetDatatype] 
    (@ColumnName varchar(max), @Datatype varchar(max))
    returns varchar(max)
Begin
    Declare @EnrichedValue varchar(max);
    select @EnrichedValue = LTRIM(RTRIM(@ColumnName));

    if(@Datatype in ('Numeric', 'Decimal')) 
        BEGIN
            select @EnrichedValue = Replace(@EnrichedValue,',','');
            select @EnrichedValue = REPLACE(@EnrichedValue,'*','');
            select @EnrichedValue = REPLACE(@EnrichedValue,'$','');

            if (@EnrichedValue = '-' or len(@EnrichedValue) = 0 or @EnrichedValue is null or @EnrichedValue like '%[eE]%')
                begin
                    select @EnrichedValue = '0'
                end
            return @EnrichedValue
        END
    if(@Datatype in ('String', 'Varchar'))
        BEGIN
            select @EnrichedValue = REPLACE(@EnrichedValue, '"', '');
            return @EnrichedValue
        END
    return @EnrichedValue;
end
4

0 に答える 0