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

SqlServer selectステートメントが一致する行と一致し、末尾にスペースがある行を選択するのはなぜですか

    私の答えを作り直すために、LEN()は末尾のスペースを除いた長さを返すように定義されているためANSI_PADDINGをテストするのは安全ではなく、AdaTheDevが言うようにDATALENGTH()が望ましいです。

    興味深いのは、ANSI_PADDINGが挿入時間の設定であり、VARCHARには適用されますが、NVARCHARには適用されないことです。

    次に、末尾にスペースがある列を返す場合、または等式に「=」を使用する場合、末尾のスペースが暗黙的に切り捨てられるようです。

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING OFF
    GO
    CREATE TABLE [dbo].[TestFeature1](
    [Id] [varchar](50) NOT NULL,
    [Leng] [decimal](18, 0) NOT NULL
    ) ON [PRIMARY]
    
    GO
    
    insert into TestFeature1 (id,leng) values ('1',100); insert into TestFeature1 (id,leng) values ('1 ',1000);
    
    -- verify no spaces inserted at end
    select '['+id+']', * from TestFeature1
    select datalength(id), * from TestFeature1
    go
    
    DROP TABLE [dbo].[TestFeature1]
    go
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING OFF
    GO
    CREATE TABLE [dbo].[TestFeature1](
    [Id] [nvarchar](50) NOT NULL,
    [Leng] [decimal](18, 0) NOT NULL
    ) ON [PRIMARY]
    
    GO
    
    insert into TestFeature1 (id,leng) values ('1',100); insert into TestFeature1 (id,leng) values ('1 ',1000);
    
    -- verify spaces inserted at end, and ANSI_PADDING OFF was not honoured by NVARCHAR
    select '['+id+']', * from TestFeature1
    select datalength(id), * from TestFeature1
    go
    


    1. Postgrespsqlが内部コマンドまたは外部コマンドとして認識されない

    2. リンクサーバーMySQLを作成する方法

    3. 接続プールと永続接続mysqli

    4. 32ビットおよび64ビットのWindowsでMySQLを(サイレントに)アンインストールする方法