覚書
SQL Server 上で 半角文字数と全角文字数が計算できるように
半角=1/全角=2
で加算した長さを返す。
16bit 時代のVBで LEN(string)*2 <> LENB(string) で半角混じりが判定できたので
それに肖って LENB。
CREATE function LENB(@string NVARCHAR(MAX))
returns int
as
BEGIN
DECLARE @length INT = 0
SELECT @length = LEN(@string)
DECLARE @lenb INT = 0
DECLARE @cnt INT = 0
DECLARE @a NVARCHAR(1)
WHILE @cnt < @length
BEGIN
SELECT @a = SUBSTRING(@string, @cnt, 1)
--全角の場合CHAR(ASCII(@a))で元に戻らない事を利用
IF CHAR(ASCII(@a)) = @a
BEGIN --半角/1byte文字
SET @lenb = @lenb + 1
END
ELSE
BEGIN --全角/2byte文字
SET @lenb = @lenb + 2
END
SET @cnt = @cnt + 1
END
RETURN (@lenb)
END
