Dav*_*eed 133 sql t-sql sql-server
如何删除字符串中的最后一个字符T-SQL
?
例如:
'TEST STRING'
Run Code Online (Sandbox Code Playgroud)
回来:
'TEST STRIN'
Run Code Online (Sandbox Code Playgroud)
Ada*_*Dev 187
例如
DECLARE @String VARCHAR(100)
SET @String = 'TEST STRING'
-- Chop off the end character
SET @String =
CASE @String WHEN null THEN null
ELSE (
CASE LEN(@String) WHEN 0 THEN @String
ELSE LEFT(@String, LEN(@String) - 1)
END
) END
SELECT @String
Run Code Online (Sandbox Code Playgroud)
小智 98
如果由于某种原因,你的列逻辑是复杂的(情况下... THEN ... ELSE ... END),那么上面的解决方案,使你不得不重复同样的逻辑在LEN()函数.复制相同的逻辑变得一团糟.如果是这种情况,那么这是一个值得注意的解决方案.此示例删除了最后一个不需要的逗号.我终于找到了REVERSE功能的用途.
select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))
Run Code Online (Sandbox Code Playgroud)
Adr*_*ien 46
试试这个:
select substring('test string', 1, (len('test string') - 1))
Run Code Online (Sandbox Code Playgroud)
小智 25
如果你的字符串是空的,
DECLARE @String VARCHAR(100)
SET @String = ''
SELECT LEFT(@String, LEN(@String) - 1)
Run Code Online (Sandbox Code Playgroud)
那么这段代码将导致错误消息'传递给子字符串函数的长度参数无效.'
你可以这样处理它:
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
Run Code Online (Sandbox Code Playgroud)
它将始终返回结果,并且在空字符串的情况下为NULL.
Dav*_*ach 17
即使源文本/var 为空或为空,这也能工作:
SELECT REVERSE(SUBSTRING(REVERSE(@a), 2, 9999))
Run Code Online (Sandbox Code Playgroud)
如果您的coloumn是text
和否varchar
,那么您可以使用:
SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))
Run Code Online (Sandbox Code Playgroud)
小智 5
如果要分两步执行此操作,而不是REVERSE-STUFF-REVERSE中的三个,则可以将列表分隔符设置为一个或两个空格.然后使用RTRIM修剪尾随空格,并使用REPLACE替换','替换双空格
select REPLACE(RTRIM('a b c d '),' ', ', ')
Run Code Online (Sandbox Code Playgroud)
但是,如果您的原始字符串可以包含内部空格,那么这不是一个好主意.
不确定性能.每个REVERSE都会创建一个新的字符串副本,但STUFF比REPLACE快三分之一.
也看到这个
我可以建议这个-hack-;)。
select
left(txt, abs(len(txt + ',') - 2))
from
t;
Run Code Online (Sandbox Code Playgroud)
这已经很晚了,但有趣的是还没有提到。
select stuff(x,len(x),1,'')
Run Code Online (Sandbox Code Playgroud)
IE:
take a string x
go to its last character
remove one character
add nothing
Run Code Online (Sandbox Code Playgroud)