[MSSQL] 移除最後一個字.

  • 8676
  • 0
  • 2017-01-18

移除最後一個字元.

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