0

フロントエンド処理の配列のように機能するフィールドを持つテーブルがあり、それは別のフラット テーブルから 9 列を連結した結果です。フィールドはそのように取り込まれました

Field1 + ',' + Field2 + ',' + Field3 + ',' + Field4 + ',' + Field5 + ',' + Field6 + ',' + Field7 + ',' + Field8 + ',' + Field9

フラット テーブルの Field4 に値がある場合、Fields 1、2、および 3 にも値があります。しかし、ほとんどの場合、フィールド 5 ~ 9 には値がありません。その結果、配列フィールドのほとんどの値 (連結後) は次のようになります。

ボブ、ジョー、メアリー、サム、、、、

この連結フィールドを更新して、代わりに次のようにする簡単な方法を探しています。

Bob,Joe,Mary,Sam

これは、Oracle に相当します。Trim(Trailing',' From FieldValue)

4

3 に答える 3

3

逆に、カンマ以外の最初の文字を見つけて、LEN() および LEFT() と組み合わせて使用​​します。

DECLARE @string VARCHAR(200) = 'Bob,Joe,Mary,Sam,,,,,'

SELECT LEFT(@string, LEN(@string) - PATINDEX('%[^,]%', REVERSE(@string))+1)
于 2016-05-23T19:48:35.567 に答える
1

単純にこれを行う場合:

SELECT REPLACE(@str, ',,', '');

末尾のコンマが偶数か奇数かによって、最後に 1 個または 0 個のコンマを持つ文字列が残ります。

コンマの場合は最後の文字を削除する SUBSTRING または LEFT 構造でこれをラップできます。

于 2016-05-23T19:48:13.490 に答える
0

次の UDF を作成します。

CREATE FUNCTION Trailing(@String VarChar(Max), @Char VarChar(5))
RETURNS VarChar(Max)
BEGIN
    RETURN
        Reverse(
        SubString(
        Reverse(@String)
        ,PatIndex('%[^' + @Char + ' ]%',Reverse(@String))
        ,DataLength(@String)
        )
        )
END
GO

試乗してみましょう:

SELECT
    'Array_Value_1,Array_Value_2,Array_Value_3,,,,,' AS Original_String,
    dbo.Trailing('Array_Value_1,Array_Value_2,Array_Value_3,,,,,', ',') AS Clean_String
GO
于 2016-05-23T19:43:54.317 に答える