Mã này cung cấp một mẫu mà bạn có thể mở rộng để xử lý khoảng trắng mà bạn chọn cho một LTRIM
đã sửa đổi .
declare @Tab as NVarChar(1) = NChar( 9 );
declare @Space as NVarChar(1) = NChar( 32 );
declare @Samples as Table ( String NVarChar(16) );
insert into @Samples ( String ) values
( 'Foo' ),
( @Tab + 'Foo' ),
( @Space + 'Foo' ),
( @Space + @Tab + 'Foo' ),
( @Tab + @Space + 'Foo' );
select String, Len( String ) as [Length], PatIndex( '%[^' + @Tab + @Space + ']%', String ) - 1 as [WhitespaceCount]
from @Samples;
REVERSE
có thể được sử dụng để triển khai phiên bản sửa đổi của RTRIM
.
CẬP NHẬT MỚI HƠN :Đoạn mã sau sử dụng danh sách các ký tự khoảng trắng như được sử dụng trong .NET Framework 4. Nó cũng hoạt động xung quanh tính năng của LEN
không tính khoảng trống ở cuối.
declare @Tab as NVarChar(1) = NChar( 9 );
declare @Space as NVarChar(1) = NChar( 32 );
declare @Samples as Table ( String NVarChar(16) );
insert into @Samples ( String ) values
( 'Foo' ),
( @Tab + 'Foo' ),
( @Space + 'Foo' ),
( @Space + @Tab + 'Foo' ),
( @Tab + @Space + 'Foo' ),
( @Tab + 'Foo' + @Space ),
( @Space + 'Foo' + @Tab ),
( @Space + @Tab + 'Foo' + @Tab + @Space ),
( @Tab + @Space + 'Foo' + @Space + @Tab ),
( 'Foo' + @Tab ),
( NULL ),
( ' ' ),
( @Space + NULL + @Tab + @Tab ),
( '' ),
( 'Hello world!' );
declare @WhitespacePattern as NVarChar(100) = N'%[^' +
NChar( 0x0020 ) + NChar( 0x00A0 ) + NChar( 0x1680 ) + NChar( 0x2000 ) +
NChar( 0x2001 ) + NChar( 0x2002 ) + NChar( 0x2003 ) + NChar( 0x2004 ) +
NChar( 0x2005 ) + NChar( 0x2006 ) + NChar( 0x2007 ) + NChar( 0x2008 ) +
NChar( 0x2009 ) + NChar( 0x200A ) + NChar( 0x202F ) + NChar( 0x205F ) +
NChar( 0x3000 ) + NChar( 0x2028 ) + NChar( 0x2029 ) + NChar( 0x0009 ) +
NChar( 0x000A ) + NChar( 0x000B ) + NChar( 0x000C ) + NChar( 0x000D ) +
NChar( 0x0085 ) + N']%';
-- NB: The Len function does not count trailing spaces.
-- Use DataLength instead.
with AnalyzedSamples as (
select String, DataLength( String ) / DataLength( NChar( 42 ) ) as [StringLength],
PatIndex( @WhitespacePattern, String ) - 1 as [LeftWhitespace],
PatIndex( @WhitespacePattern, Reverse( String ) ) - 1 as [RightWhitespace]
from @Samples ),
TrimmedSamples as (
select String, StringLength, [LeftWhitespace], [RightWhitespace],
case
when String is NULL then NULL
when LeftWhitespace = -1 then N''
else Substring( String, LeftWhitespace + 1, StringLength - LeftWhitespace )
end as [LTrim],
case
when String is NULL then NULL
when RightWhitespace = -1 then N''
else Reverse( Substring( Reverse( String ), RightWhitespace + 1, StringLength - RightWhitespace ) )
end as [RTrim],
case
when String is NULL then NULL
when LeftWhitespace = -1 then N''
else Substring( String, LeftWhitespace + 1, StringLength - LeftWhitespace - RightWhitespace )
end as [Trim]
from AnalyzedSamples )
select N'"' + String + N'"' as [String], StringLength, [LeftWhitespace], [RightWhitespace],
N'"' + [LTrim] + N'"' as [LTrim], DataLength( [LTRIM] ) / DataLength( NChar( 42 ) ) as [LTrimLength],
N'"' + [RTrim] + N'"' as [RTrim], DataLength( [RTRIM] ) / DataLength( NChar( 42 ) ) as [RTrimLength],
N'"' + [Trim] + N'"' as [Trim], DataLength( [TRIM] ) / DataLength( NChar( 42 ) ) as [TrimLength]
from TrimmedSamples;