【问题标题】:SQL : remove last comma in stringSQL:删除字符串中的最后一个逗号
【发布时间】:2021-02-08 15:01:01
【问题描述】:

我在 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


【解决方案1】:

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

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

如果你不能确定最后一个逗号是否出现在字符串中,使用这个:

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

【讨论】:

    【解决方案2】:

    使用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

    【讨论】:

      【解决方案3】:

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

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

      example fiddle

      【讨论】:

      • 谢谢,但 SHORTD 列是“文本,非空”字段,因此遇到 LEN 问题:参数数据类型文本对 len 函数的参数 1 无效。
      【解决方案4】:

      不确定该语法是否在 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,我更喜欢这个
      【解决方案5】:

      使用 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

      【讨论】:

      【解决方案6】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 2018-09-19
        • 2013-10-07
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多