Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 删除SQL中字符串列的最后一个字符_Sql Server_Tsql_Substring - Fatal编程技术网

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

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

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

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

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的新手都有帮助。