【问题标题】:Remove particular char from end of a string从字符串末尾删除特定字符
【发布时间】:2018-03-11 15:38:28
【问题描述】:

我在一张表中很少有这样的记录

            123456/
            53787899/
            68239003-21/
            5761289903120,7278/
            574738992842/478389

我想检查字符串末尾是否存在/(斜杠),如果存在,请仅从末尾删除斜杠。

我知道使用charindexpartindex 会起作用。

但是,这个怎么用呢?

我希望我的输出字符串是

            123456
            53787899
            68239003-21
            5761289903120,7278
            574738992842/478389

注意:/(斜线)后面可以有空格。请让我知道这样做。

DDL

declare @t table (MyString VARCHAR(40) NULL)

insert @t (MyString)
values ('123456/'), ('53787899/'), ('68239003-21/'),
       ('5761289903120,7278/'), ('574738992842/478389')

select * 
from @t

【问题讨论】:

  • 如果斜线后面有空格,要去掉斜线吗?
  • 我只想删除斜线。除了空格之外,不应有任何键盘字符。如果有空格,我会假设斜杠后面没有任何内容,因此我将删除斜杠。

标签: sql-server tsql sql-server-2016


【解决方案1】:

您可以使用RIGHT 与要匹配的字符数来查找字符串是否以'/' 字符结尾。

  DECLARE @STR VARCHAR(100)='5761289903120,7278/'
  SELECT 
  CASE WHEN RIGHT(@STR,1)='/' THEN SUBSTRING(@STR, 1, (LEN(@STR) - 1)) ELSE @STR END

工作示例

    WITH MT AS
    (
     SELECT * FROM
     (VALUES('123456/'),('53787899/'),('68239003-21/'),('5761289903120,7278/'),('574738992842/478389')) T(mystring)
    )

   SELECT 
      CASE WHEN RIGHT(mystring,1)='/' THEN SUBSTRING(mystring, 1, (LEN(mystring) - 1)) ELSE mystring END
   FROM MT

输出

    MyString
   ---------
    123456
    53787899
    68239003-21
    5761289903120,7278
    574738992842/478389

编辑:如果您想消除最后的任何空格,您可以更改查询,如下所示。

RIGHT(RTRIM(mystring),1)='/'

在Where子句中使用

 SELECT  CASE WHEN RIGHT(RTRIM(MY_COLUMN),1)='/' THEN SUBSTRING(MY_COLUMN, 1, (LEN(MY_COLUMN) - 1)) ELSE MY_COLUMN END AS MY_COLUMN
 FROM [MY_TABLE]
 WHERE RTRIM(MY_COLUMN) LIKE '%/'

如果要将其更新回表,可以使用如下查询。

 UPDATE T
 SET T.MY_COLUMN = CASE WHEN RIGHT(RTRIM(MY_COLUMN),1)='/' THEN SUBSTRING(MY_COLUMN, 1, (LEN(MY_COLUMN) - 1)) ELSE MY_COLUMN END
 FROM [MY_TABLE] T

【讨论】:

  • 它是一个数据库表,我发现需要找到只有“斜线结尾”的记录(使用where条件),然后替换斜线。
【解决方案2】:

类似这样的:

declare @t table (
    MyString VARCHAR(40) NULL
)

insert @t (MyString)
VALUES ('123456/'),
    ('53787899/'),
    ('68239003-21/'),
    ('5761289903120,7278/'),
    ('574738992842/478389')

select  MyString,
        CASE WHEN MyString LIKE '%/' THEN LEFT(MyString, LEN(MyString)-1) ELSE MyString END NewValue
from    @t

【讨论】:

    【解决方案3】:

    我觉得这样就可以了

    declare @T table (string varchar(100));
    insert into @T values 
           (' 123456/')
          , (' 53787899/')
          , ('68239003-21/')
          , ('5761289903120,7278/')
          , ('5761289903120,7279/ ')
          , ('574738992842/478389 ')
          , ('574738992842/478390 ');
    select '''' + t.string + '''' from @T t;
    update t 
    set t.string = SUBSTRING(LTRIM(RTRIM(T.string)), 1, LEN(LTRIM(RTRIM(T.string))) - 1)
    from @T t
    where t.string like '%/';
    select t.string from @T t;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多