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

问题描述 投票:0回答:7

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

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

  INETSHORTD
1  94
2  85,
3  94, 92
4  89, 99, 32,

输出将是:

  INETSHORTD
  94
  85
  94, 92
  89, 99, 32

有什么想法吗?

sql sql-server sql-server-2008
7个回答
16
投票

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

SET @string = REPLACE(@string + '<END>', ',<END>', '')

如果您无法确定最后一个逗号是否出现在字符串中,请使用此:

SET @string = REPLACE(REPLACE(@string + '<END>', ',<END>', ''), '<END>', '')

8
投票

使用

REVERSE
STUFF

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

首先,您需要

TRIM
删除数据中的前导空格和尾随空格。然后
REVERSE
并检查第一个字符是否为
,
。如果是,请将其删除,否则不执行任何操作。然后又
REVERSE
又回来了。您可以使用
STUFF(string, 1, 1, '')
删除第一个字符。

SQL 小提琴


8
投票

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

SELECT TRIM(',' from INETSHORTD) FROM TABLE

7
投票

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

Select
    CASE
        WHEN INETSHORTD LIKE '%,'  THEN LEFT(INETSHORTD, LEN(INETSHORTD)-1)
        ELSE INETSHORTD
    END
From yourtable

小提琴示例


1
投票

使用 CHARINDEX (https://msdn.microsoft.com/en-us/library/ms186323.aspx) 和 LEN (https://msdn.microsoft.com/en-us/library/ms190329.aspx) )你应该能够这样做:

SELECT IIF( CHARINDEX( ',', tmp.SHORTD, LEN( tmp.SHORTD ) ) > 0
          , LEFT( tmp.SHORTD, LEN( tmp.SHORTD ) - 1 )
          , tmp.SHORTD )
  FROM tmp

这个 SQL Fiddle 显示了它的工作情况:http://sqlfiddle.com/#!3/a99c8/7


0
投票
declare @t table (id varchar(20)) 
insert into @t(id)values ('94,'),('85,'),('94, 92'),('89, 99, 32,')

SELECT  REVERSE(SUBSTRING(  REVERSE(id),    PATINDEX('%[A-Za-z0-9]%',REVERSE(id)),
    LEN(id) - (PATINDEX('%[A-Za-z0-9]%',REVERSE(id)) - 1)   ) )     
FROM    @t

0
投票

如果您有 Microsoft SQL Server 的现代版本,那么您可以保持简单并使用 内置修剪方法

TRIM ( [ LEADING | TRAILING | BOTH ] [characters FROM ] string )

考虑这段代码:

declare @result nvarchar(50) =N'   hello world!, ';
print len(@result)
set @Result= TRIM(BOTH ', ' from @Result) 
print @result
print len(@result)

答案将是:

16 
hello world! 
12

为了让它更清楚一点,您可以看一下这个示例,它演示了逗号、空格和感叹号的删除。

declare @result nvarchar(50) =N'   hello world!, ';
print len(@result)
set @Result= TRIM(BOTH ', !' from @Result) 
print @result
print len(@result)

现在答案是:

16
hello world
11

可以看到[character]参数中的每个字符都被移除了。

我在演示中使用了一个变量,但它在列中也同样有效。

© www.soinside.com 2019 - 2024. All rights reserved.