SQL:去掉字符串中的最后一个逗号

7

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

例如,如果我有以下行,则需要从第2行和第4行中删除逗号。

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

输出结果将会是:
  INETSHORTD
  94
  85
  94, 92
  89, 99, 32

有什么想法吗?

你能发布输出吗? - mohan111
6个回答

14

这是更优雅 / 可读性更好的方法:

SET @string = REPLACE(@string + '<END>', ',<END>', '')
如果你不能确定最后一个逗号是否出现在字符串中,可以使用以下方法:
SET @string = REPLACE(REPLACE(@string + '<END>', ',<END>', ''), '<END>', '')

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

首先,你需要对数据进行TRIM操作,以去除前导和尾随的空格。然后将其REVERSE反转,并检查第一个字符是否为,。如果是,则删除它,否则不做任何操作。然后再次REVERSE反转回来。您可以使用STUFF(string, 1, 1, '')来删除第一个字符。

SQL Fiddle


7

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

SELECT TRIM(',' from INETSHORTD) FROM TABLE

我更喜欢这种写法:SELECT REVERSE(STUFF(REVERSE(LTRIM(RTRIM(INETSHORTD))), 1, CASE WHEN SUBSTRING((REVERSE(LTRIM(RTRIM(INETSHORTD)))), 1, 1) = ',' THEN 1 ELSE 0 END, '')) FROM tbl - Zach Smith

6

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

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

example fiddle


谢谢,但是SHORTD列是一个“文本,非空”字段,所以在LEN函数中遇到了问题:参数数据类型文本对于LEN函数的第1个参数无效。 - Justin

1

谢谢,但是SHORTD列是一个“文本,非空”字段,所以使用LEN函数会出现错误:LEN函数的参数1的数据类型无效。 - Justin
2
只是因为我想证明我的想法能够实现,你可以使用SUBSTRING(https://msdn.microsoft.com/en-us/library/ms187748.aspx)和DATALENGTH(https://msdn.microsoft.com/en-us/library/ms173486.aspx)来获取结果:http://sqlfiddle.com/#!3/39504e/5 - Drew Leffelman

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接