Answers:
例如
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
如果由于某种原因您的列逻辑很复杂(情况是...那么... else ...结束),那么上述解决方案将使您不得不在len()函数中重复相同的逻辑。复制相同的逻辑变得一团糟。如果是这种情况,那么这是一个值得注意的解决方案。本示例摆脱了最后一个不需要的逗号。我终于找到了REVERSE函数的用途。
select reverse(stuff(reverse('a,b,c,d,'), 1, 1, ''))
NULL
如果传递的字符串比为所指定的删除范围短,则返回此代码STUFF
。将其包装起来,ISNULL
以获取空字符串大小写不同的输出值。
select reverse(stuff(reverse('a,b,c,d,'), 2, 1, ''))
试试这个:
select substring('test string', 1, (len('test string') - 1))
select substring('test string', 0, len('test string'))
吗?
如果您的字串为空,
DECLARE @String VARCHAR(100)
SET @String = ''
SELECT LEFT(@String, LEN(@String) - 1)
那么此代码将导致错误消息“无效的长度参数传递给子字符串函数”。
您可以这样处理:
SELECT LEFT(@String, NULLIF(LEN(@String)-1,-1))
它将始终返回结果,如果为空字符串则为NULL。
你可以创建功能
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
我的答案与接受的答案相似,但是它还会检查Null和Empty 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
我喜欢@ 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
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)