【问题标题】:Remove Multiple Trailing Characters in SQL Server - Oracle equivalent to Trim (Trailing)删除 SQL Server 中的多个尾随字符 - Oracle 相当于 Trim(尾随)
【发布时间】:2016-09-20 19:30:08
【问题描述】:

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

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

如果平面表中的 Field4 有值,则字段 1、2 和 3 也有值。但是,大多数时候字段 5 - 9 没有值。结果是数组字段中的大多数值(连接后)如下所示:

鲍勃、乔、玛丽、山姆、、、、、

我正在寻找一种简单的方法来更新此连接字段,使其看起来像这样:

Bob,Joe,Mary,Sam

这是相当于Trim(Trailing',' From FieldValue)的Oracle

【问题讨论】:

    标签: sql-server trim trailing


    【解决方案1】:

    创建以下 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
    

    【讨论】:

    • 我个人不会将字符串反转三遍。您需要执行一次,然后您可以通过从长度中减去 patindex 来计算所需字符串的位。
    【解决方案2】:

    如果你只是这样做:

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

    最后会留下一个带有 1 或 0 逗号的字符串,具体取决于尾随逗号是偶数还是奇数。

    您可以将其包装在 SUBSTRING 或 LEFT 构造中,如果它是逗号,则删除最后一个字符。

    【讨论】:

      【解决方案3】:

      我会反过来,找到第一个非逗号字符,然后将它与 LEN() 和 LEFT() 结合使用

      DECLARE @string VARCHAR(200) = 'Bob,Joe,Mary,Sam,,,,,'
      
      SELECT LEFT(@string, LEN(@string) - PATINDEX('%[^,]%', REVERSE(@string))+1)
      

      【讨论】:

      • --这很酷,但因以下原因失败:DECLARE @string VARCHAR(200) = 'Bob1,Joe2,Mary3,Sam4,,,,,' SELECT LEFT(@string, LEN( @string) - PATINDEX('%[AZ]%', REVERSE(@string))+1)
      • 感谢 Martin 的建议,代码已经更新,可以找到第一个非逗号字符。
      猜你喜欢
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多