sql >> データベース >  >> RDS >> Sqlserver

UDFおよびCLRを使用せずにT-SQLの文字列からすべての空白文字を削除する良い方法は何ですか?

    このコードは、変更されたLTRIMに対して選択した空白を処理するために拡張できるパターンを提供します。 。

    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 関数を使用して、RTRIMの変更バージョンを実装できます 。

    新しいアップデート :次のコードは、.NETFramework4で使用されている空白文字のリストを使用しています。機能も回避します。 LENの 末尾の空白はカウントしません。

    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;
    


    1. psql内からpostgresqlデータベースをバックアップする方法は?

    2. SQL Server Management Studio(SSMS)でテンプレートを使用する方法-SQL Server/TSQLチュートリアルパート16

    3. 致命的なエラー:未定義の関数session_register()の呼び出し

    4. 2つの異なるwhere句を持つ2つのデータセットを返す必要があります