SQL:删除字符串中的最后一个逗号

Jus*_*tin 4 sql sql-server sql-server-2008

我在 SQL 表中有一个文本备注字段,如果它是逗号,我需要删除该字段中的最后一个字符。

因此,例如,如果我有这些行,我需要从第 2 行和第 4 行中删除逗号。

  INETSHORTD
1  94
2  85,
3  94, 92
4  89, 99, 32,
Run Code Online (Sandbox Code Playgroud)

输出将是:

  INETSHORTD
  94
  85
  94, 92
  89, 99, 32
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Fel*_*tan 8

使用REVERSESTUFF

SELECT
    REVERSE(
        STUFF(
            REVERSE(LTRIM(RTRIM(INETSHORTD))), 
            1, 
            CASE WHEN SUBSTRING((REVERSE(LTRIM(RTRIM(INETSHORTD)))), 1, 1) = ',' THEN 1 ELSE 0 END, 
            ''
        )
    )
FROM tbl
Run Code Online (Sandbox Code Playgroud)

首先,您希望TRIM您的数据摆脱前导和尾随空格。然后REVERSE它并检查第一个字符是否为,. 如果是,删除它,否则什么都不做。然后REVERSE它又回来了。您可以使用 删除第一个字符STUFF(string, 1, 1, '')

SQL小提琴


小智 7

不确定该语法在 2015 年是否可用,但我认为这是一个更优雅的解决方案。

SELECT TRIM(',' from INETSHORTD) FROM TABLE
Run Code Online (Sandbox Code Playgroud)


Sac*_*chu 6

如果特定字符串以 结尾,则使用 case 语句,使用 LEFT 函数和 lenght - 1 取子字符串

Select
    CASE
        WHEN INETSHORTD LIKE '%,'  THEN LEFT(INETSHORTD, LEN(INETSHORTD)-1)
        ELSE INETSHORTD
    END
From yourtable
Run Code Online (Sandbox Code Playgroud)

示例小提琴


Yai*_*ron 6

这是一种更优雅/可读的方式:

SET @string = REPLACE(@string + '<END>', ',<END>', '')
Run Code Online (Sandbox Code Playgroud)

如果您不能确定最后一个逗号是否出现在字符串中,请使用以下命令:

SET @string = REPLACE(REPLACE(@string + '<END>', ',<END>', ''), '<END>', '')
Run Code Online (Sandbox Code Playgroud)