【问题标题】:Remove last character from string column in SQL从 SQL 中的字符串列中删除最后一个字符
【发布时间】:2014-04-10 06:45:30
【问题描述】:

我在 X 列中每个值的末尾都有这些特殊字符“||~||”。我需要删除这些特殊字符。

现在我正在使用这种语法,但它似乎无法完成所有行的任务。

set [Customer Num] = substring(ltrim(rtrim([Customer Num])),3,len([Customer Num]))

【问题讨论】:

  • 时间字符 ~ 会在你的字符串中出现多少?
  • 是字符'|'出现在字符串中的其他任何地方?
  • LEN([Customer Num]) 为您提供整列的长度。但是如果LTRIM(RTRIM()) 有任何效果,那可能不是您感兴趣的长度。您能否给出一些示例值,并告诉我们该列的定义是什么(例如[n][var]char[(l)] 是什么类型) ?
  • ||~||出现在每个 [customer num] 的末尾,类型为 nvarchar
  • @user3518233,你有答案吗?

标签: sql-server tsql substring


【解决方案1】:

试试这个选项,

Declare @myStr varchar(50) = 'amol~'

--如果要删除任意位置的char~

Select REPLACE(@myStr,'~','')

Set @myStr = '~amol~'
Select REPLACE(@myStr,'~','')

Set @myStr = '~am~ol~'
Select REPLACE(@myStr,'~','')

--如果要删除字符~ at Last position & char~的存在不一致 设置@myStr ='amol~'

Select Case When RIGHT(@myStr,1) = '~'
            Then LEFT(@myStr,len(@myStr) - 1)
            Else @myStr
        End

如果你想替换 ||~||那就试试这个,

Declare @myStr varchar(50) = 'amol ||~|| '

--If want to remove string ||~| of any position
Select REPLACE(@myStr,'||~||','')
Set @myStr = '||~||amol||~||'
Select REPLACE(@myStr,'||~||','')
Set @myStr = '||~||am||~||ol||~||'
Select REPLACE(@myStr,'||~||','')

--If want to remove string ||~| at Last position & existance of char ||~| is inconsistent
Set @myStr ='amol||~||'

Select Case When RIGHT(@myStr,5) = '||~||'
            Then LEFT(@myStr,len(@myStr) - 5)
            Else @myStr
        End

【讨论】:

  • 所以答案是:select LEFT(@myStr, len(@myStr) - 5)。之前有这么大的解释!无论如何,它对任何 SQL 新手都有帮助。
【解决方案2】:

如果您确定您的值以特殊字符串结尾,请尝试

substring ( [Customer Num], 1, length([Customer Num]) - length(' ||~|| ') )

不过,最好防止意外删除:

substring ( 
      [Customer Num]
    , 1
    , Case coalesce(substr( [Customer Num], length([Customer Num]) - length(' ||~|| '), '_' )
          When ' ||~|| ' then length([Customer Num]) - length(' ||~|| ') 
          Else                length([Customer Num])
      End
)

如果您的 rdbms 支持正则表达式,这将简化为(使用 Oracle 语法)

Regexp_replace ( [Customer Num], ' \|\|~\|\| $', '')

【讨论】:

    【解决方案3】:

    假设您必须删除 ColumnX 的最后 3 个字符

    set [ColumnX] = substring(ltrim(rtrim([ColumnX])),0,len([ColumnX]) - 3)
    

    【讨论】:

      【解决方案4】:

      这行得通

      update [Table] set [Customer Num] = (substring(ltrim(rtrim([Customer Num])),0,len([Customer Num]) - 3))
      where [Customer Num]  like '%only text containing this string%'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-15
        • 2017-08-19
        • 2010-11-18
        • 2013-07-29
        • 2011-01-19
        相关资源
        最近更新 更多