0

我有一个表,其中的字段类似于用于某些前端处理的数组,这是连接来自不同平面表的 9 列的结果。该字段是这样填充的

字段1 + ',' + 字段2 + ',' + 字段3 + ',' + 字段4 + ',' + 字段5 + ',' + 字段6 + ',' + 字段7 + ',' + 字段8 + ',' + 字段9

如果平面表中的 Field4 有值,则字段 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 回答