我有这个查询,现在在这种情况下如何删除选择语句的最后一个字符?
SELECT ...,
...,
,CASE sfo.[Type] WHEN 'true' THEN sr.[Note] WHEN 'false' THEN
(
SELECT Options + ', ' AS [text()] FROM Table1 sa JOIN SurveyResult surRes ON sa.Id=surRes.Table1Id WHERE sa.IsActive=1 AND Table4Id = 4 AND surRes.FormIdentifier=sr.[FormIdentifier] FOR XML PATH ('')
--This select Option returns a record like this:
--'a,b,c,' or 'Male,Female,'
--How do I remove the last character for this instance.
--I saw examples of using substring on the internet but it requires using a variable. Something I can't afford using in this scenario.
) ELSE sa.Options END AS Answer
FROM [dbo].[SurveyResult] sr
LEFT JOIN [dbo].[Table1] sa on sr.[Table1Id] = sa.Id
INNER JOIN [dbo].[Table2] sq ON sr.Table2Id = sq.Id
INNER JOIN [dbo].[Table3] si ON sq.Table3Id = si.Id
INNER JOIN [dbo].[Table4] sfo ON sq.Table4Id = sfo.Id
INNER JOIN [dbo].[Table5] u ON sr.[Table5Id] = u.Id
INNER JOIN [dbo].[Table6] a ON si.Table6Id = a.Id
INNER JOIN [dbo].[Table7] l ON si.Table7Id = l.Id
WHERE si.IsActive = 1
ORDER BY sr.Id
我试过用这个
SELECT REVERSE(STUFF(REVERSE(SELECT Options + ', ' AS [text()] FROM Table1 sa JOIN SurveyResult surRes ON sa.Id=surRes.Table1Id WHERE sa.IsActive=1 AND Table4Id = 4 AND surRes.FormIdentifier=sr.[FormIdentifier] FOR XML PATH ('')), 1, 1, ''))
不行。
而不是像male, female,
那样将逗号放在末尾,而是将其放在开头(例如,male,female
(
然后,您可以轻松使用STUFF
删除第一个字符:
SELECT STUFF(',male,female',1,1,'');
显然,分隔字符串将是您的列值。
另一种方法(也照顾NULL
( -
DECLARE @string NVARCHAR(100) = 'Male,Female,'
SELECT LEFT(@string, NULLIF(LEN(@string)-1,-1))
>请尝试SQL服务器的代码
declare @abc nvarchar(1000)='a,b,c,'
select LEFT(@abc, LEN(@abc) - 1)