移除最後一個字元.
1. 利用 LEN 取得字串長度, 再用 LEFT 取得長度 -1 的字串
DECLARE @str as nvarchar(50);
SET @str = 'Hello world';
SELECT LEFT(@str, Len(@str)-1);
-- Hello worl
2. 利用 Reverse 反轉字串, 再用 Stuff 插入字串, 最後再用 Reverse 反轉回來得到結果
DECLARE @str as nvarchar(50);
SET @str = 'Hello world';
SELECT REVERSE(stuff(REVERSE(@str),1,1,''));
一般來說, (1.)應該是最常使用方法, 但若要處理 For Xml Path('') 所產生出來的連接詞就有點囉唆. [個人對於太多子查詢會有閱讀障礙]
select main.Name, Left(main.Prfs, Len(main.Prfs)-1)
from (select Name, (SELECT
prf.name + ','
FROM ViewRegisteredPrf AS prf
WHERE prf.EstbId = RegisteredExt.EstbId
FOR XML PATH ('')) as Prfs
from RegisteredExt) as main
改成 (2.) 個人感覺上就比較好閱讀.
select Name, REVERSE(
STUFF(
REVERSE(
(SELECT prf.name + ','
FROM ViewRegisteredPrf AS prf
WHERE prf.EstbId = RegisteredExt.EstbId
FOR XML PATH ('')
)
),1,1,'')
) as Prfs from RegisteredExt
當然你也可以寫成Function方便後續的呼叫, 以下提供已經寫好的function script及使用範例
-- function script
CREATE FUNCTION [dbo].[fn_RemoveLastChar]
(
@string as nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
RETURN REVERSE(STUFF(REVERSE(@string),1,1,''));
END
GO
-- Using
select dbo.fn_RemoveLastChar('LastResort')
-- 輸出: LastResor