从SQL中的字符串列中删除最后一个字符

时间:2014-04-10 06:45:31

标签: sql-server tsql substring

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

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

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

4 个答案:

答案 0 :(得分:5)

尝试此选项,

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

- 如果想删除任何位置的char~

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

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

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

- 如果想在最后位置移除角色〜 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

答案 1 :(得分:1)

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

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], ' \|\|~\|\| $', '')

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这有效

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