删除T-SQL中string中的最后一个字符?
如何删除T-SQL
string的最后一个字符?
例如:
'TEST STRING'
回来:
'TEST STRIN'
例如
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
如果由于某种原因,你的列逻辑是复杂的(如果… then … else … end),那么上述解决scheme将导致你不得不在len()函数中重复相同的逻辑。 复制相同的逻辑变得混乱。 如果是这样的话,这是一个值得注意的解决scheme。 这个例子摆脱了最后一个不需要的逗号。 我终于find了REVERSE函数的用法。
select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))
尝试这个:
select substring('test string', 1, (len('test string') - 1))
如果你的string是空的,
DECLARE @String VARCHAR(100) SET @String = '' SELECT LEFT(@String, LEN(@String) - 1)
那么这段代码将会导致错误信息“无效的长度parameter passing给子串函数”。
你可以这样处理:
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
它将始终返回结果,并在空string的情况下为NULL。
如果你想分两步做,而不是REVERSE-STUFF-REVERSE三个,你可以让你的列表分隔符是一个或两个空格。 然后使用RTRIM修剪尾部空格,并用“,”replace双空格,
select REPLACE(RTRIM('abcd '),' ', ', ')
但是,如果您的原始string可以包含内部空格,这不是一个好主意。
不确定的performance。 每个REVERSE创build一个string的新副本,但STUFF比REPLACE快三分之一。
也看到这个
如果你的coloumn是text
而不是varchar
,那么你可以使用这个:
SELECT SUBSTRING(@String, 1, NULLIF(DATALENGTH(@String)-1,-1))
select left('TEST STRING', len('TEST STRING')-1)
我可以build议这个-hack-;)。
select left(txt, abs(len(txt + ',') - 2)) from t;
SQL Server小提琴演示
获取最后一个字符正确(@string,len(@String) – (len(@String) – 1))
你可以创buildfunction
CREATE FUNCTION [dbo].[TRUNCRIGHT] (@string NVARCHAR(max), @len int = 1) RETURNS NVARCHAR(max) AS BEGIN IF LEN(@string)<@len RETURN '' RETURN LEFT(@string, LEN(@string) - @len) END
尝试这个
DECLARE @String VARCHAR(100) SET @String = 'TEST STRING' SELECT LEFT(@String, LEN(@String) - 1) AS MyTrimmedColumn
@result = substring(@result, 1, (LEN(@result)-1))
我爱@ bill-hoenig的答案; 然而,我正在使用一个子查询,我赶上了因为REVERSE函数需要两组括号。 花了我一段时间来找出那一个!
SELECT -- Return comma delimited list of all payment reasons for this Visit REVERSE(STUFF(REVERSE(( SELECT DISTINCT CAST(CONVERT(varchar, r1.CodeID) + ' - ' + c.Name + ', ' AS VARCHAR(MAX)) FROM VisitReason r1 LEFT JOIN ReasonCode c ON c.ID = r1.ReasonCodeID WHERE p.ID = r1.PaymentID FOR XML PATH('') )), 1, 2, '')) ReasonCode FROM Payments p
我的答案类似于接受的答案,但它也检查空string和空string。
DECLARE @String VARCHAR(100) SET @String = 'asdfsdf1' -- If string is null return null, else if string is empty return as it is, else 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
通过修剪特定列的最后N个字符来更新logging:
UPDATE tablename SET columnName = LEFT(columnName , LEN(columnName )-N) where clause
尝试一下 :
DECLARE @String NVARCHAR(100) SET @String = '12354851' SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
declare @string varchar(20)= 'TEST STRING' Select left(@string, len(@string)-1) as Tada
输出:
Tada -------------------- TEST STRIN
尝试这个,
DECLARE @name NVARCHAR(MAX) SET @name='xxxxTHAMIZHMANI****'SELECT Substring(@name, 5, (len(@name)-8)) as UserNames
和输出将像THAMIZHMANI
declare @x varchar(20),@y varchar(20) select @x='sam' select case when @x is null then @y when @y is null then @x else @x+','+@y end go declare @x varchar(20),@y varchar(20) select @x='sam' --,@y='john' DECLARE @listStr VARCHAR(MAX) SELECT @listStr = COALESCE(@x + ', ' ,'') +coalesce(@y+',','') SELECT left(@listStr,len(@listStr)-1)