Sql server 删除SQL中字符串列的最后一个字符
我在X列中每个值的末尾都有这些特殊字符| | ~| |。我需要删除这些特殊字符 现在我正在使用这种语法,但它似乎不能完成所有行的任务Sql server 删除SQL中字符串列的最后一个字符,sql-server,tsql,substring,Sql Server,Tsql,Substring,我在X列中每个值的末尾都有这些特殊字符| | ~| |。我需要删除这些特殊字符 现在我正在使用这种语法,但它似乎不能完成所有行的任务 set [Customer Num] = substring(ltrim(rtrim([Customer Num])),3,len([Customer Num])) 试试这个选项 Declare @myStr varchar(50) = 'amol~' -如果要删除任何位置的char~ Select REPLACE(@myStr,'~','') Set @m
set [Customer Num] = substring(ltrim(rtrim([Customer Num])),3,len([Customer Num]))
试试这个选项
Declare @myStr varchar(50) = 'amol~'
-如果要删除任何位置的char~
Select REPLACE(@myStr,'~','')
Set @myStr = '~amol~'
Select REPLACE(@myStr,'~','')
Set @myStr = '~am~ol~'
Select REPLACE(@myStr,'~','')
-如果要删除最后位置的字符~,则字符的存在不一致
设置@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
试试这个选项
Declare @myStr varchar(50) = 'amol~'
-如果要删除任何位置的char~
Select REPLACE(@myStr,'~','')
Set @myStr = '~amol~'
Select REPLACE(@myStr,'~','')
Set @myStr = '~am~ol~'
Select REPLACE(@myStr,'~','')
-如果要删除最后位置的字符~,则字符的存在不一致
设置@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
假设您必须删除ColumnX的最后3个字符
set [ColumnX] = substring(ltrim(rtrim([ColumnX])),0,len([ColumnX]) - 3)
假设您必须删除ColumnX的最后3个字符
set [ColumnX] = substring(ltrim(rtrim([ColumnX])),0,len([ColumnX]) - 3)
如果确定值以特殊字符串结尾,请尝试
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], ' \|\|~\|\| $', '')
如果确定值以特殊字符串结尾,请尝试
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], ' \|\|~\|\| $', '')
这很有效
update [Table] set [Customer Num] = (substring(ltrim(rtrim([Customer Num])),0,len([Customer Num]) - 3))
where [Customer Num] like '%only text containing this string%'
这很有效
update [Table] set [Customer Num] = (substring(ltrim(rtrim([Customer Num])),0,len([Customer Num]) - 3))
where [Customer Num] like '%only text containing this string%'
时间字符~在字符串中的出现方式?字符“|”是否出现在字符串中的其他任何位置?LEN[Customer Num]为您提供整个列的长度。但是如果LTRIMRTRIM有任何影响,那可能不是你感兴趣的长度。您能否给出一些示例值,并告诉我们该列的定义是什么,例如[n][var]char[l]是什么类型?| | ~| |出现在每个[customer num]的末尾,类型是nvarchar@user3518233,您有您的ans吗?时间字符~将如何出现在您的字符串中?字符“|”是否出现在字符串中的其他位置?LEN[Customer Num]给出了整个列的长度。但是如果LTRIMRTRIM有任何影响,那可能不是您感兴趣的长度。您能给出一些示例值,并告诉我们该列的定义是什么,例如[n][var]char[l]是什么类型的吗?| | ~| |出现在每个[Customer Num]的末尾类型是nvarchar@user3518233,你有你的答案吗?所以答案是:选择LEFT@myStr, len@myStr在这之前有这么一个巨大的解释!不管怎样,它对任何SQL新手都有帮助。所以答案是:选择LEFT@myStr, len@myStr在那之前有这么大的解释!不管怎样,这对SQL的新手都有帮助。