Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 删除SQL Server-Oracle中的多个尾随字符,相当于Trim(尾随)_Sql Server_Trim_Trailing - Fatal编程技术网

Sql server 删除SQL Server-Oracle中的多个尾随字符,相当于Trim(尾随)

Sql server 删除SQL Server-Oracle中的多个尾随字符,相当于Trim(尾随),sql-server,trim,trailing,Sql Server,Trim,Trailing,我有一个带有字段的表,该字段的作用类似于某个前端处理的数组,这是从不同的平面表连接9列的结果。该字段是这样填充的 “字段1+”、“+Field2+”、“+Field3+”、“+Field4+”、“+Field5+”、“+Field6+”、“+Field7+”、“+Field8+”、“+Field9 如果平面表格中的字段4有值,则字段1、2和3也有值。但是,大多数时间字段5–9没有值。结果是数组字段中的大多数值(连接后)如下所示: Bob,Joe,Mary,Sam 鲍勃、乔、玛丽、萨姆 我正在寻

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

“字段1+”、“+Field2+”、“+Field3+”、“+Field4+”、“+Field5+”、“+Field6+”、“+Field7+”、“+Field8+”、“+Field9

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

Bob,Joe,Mary,Sam
鲍勃、乔、玛丽、萨姆

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

Bob,Joe,Mary,Sam

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

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

创建以下自定义项:

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
如果您只是这样做:

SELECT REPLACE(@str, ',,', '');
根据尾随逗号的奇数或偶数,您将得到一个末尾带有1或0个逗号的字符串

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

如果您只需执行以下操作:

SELECT REPLACE(@str, ',,', '');
根据尾随逗号的奇数或偶数,您将得到一个末尾带有1或0个逗号的字符串


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

我将使用一个相反的字符,找到第一个非逗号字符,然后将其与LEN()和LEFT()一起使用


我将使用一个相反的字符,找到第一个非逗号字符,然后将其与LEN()和LEFT()结合使用


就我个人而言,我不会把绳子倒转三次。你需要做一次,但是你可以通过从长度中减去patindex来计算你需要的字符串位。就个人而言,我不会将字符串反转三次。您需要执行一次,然后可以通过从长度中减去patindex来计算所需的字符串位。--这很酷,但在以下方面失败:声明@string VARCHAR(200)='Bob1,Joe2,Mary3,Sam4,,,,,,'选择LEFT(@string,LEN(@string)-patindex('%[A-Z]',REVERSE(@string))+1)由于Martin的建议,代码已被更新以查找第一个非逗号字符。--这很酷,但在以下方面失败:声明@string VARCHAR(200)='Bob1,Joe2,Mary3,Sam4,,,,,,'SELECT LEFT(@string,LEN(@string)-PATINDEX('%[A-Z]',REVERSE(@string))+1)由于Martin的建议,代码已经更新以查找第一个非逗号字符。