sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor skulle SqlServer vælge sætningen vælge rækker, der matcher og rækker, der matcher og har efterfølgende mellemrum

For at omarbejde mit svar, er LEN() usikker at teste ANSI_PADDING, da den er defineret til at returnere længden eksklusiv efterfølgende mellemrum, og DATALENGTH() er at foretrække, som AdaTheDev siger.

Det interessante er, at ANSI_PADDING er en indsættelsestidsindstilling, og at den er hædret for VARCHAR, men ikke for NVARCHAR.

For det andet, hvis du returnerer en kolonne med efterstillede mellemrum eller bruger '=' for lighed, ser det ud til, at der forekommer en implicit afkortning af det efterfølgende mellemrum.

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. Database Mail Tutorials

  2. golang gorm Få adgang til den underliggende mysql-forespørgsel

  3. Hvordan finder man ud af, om en dato passer til et interval i enten PHP eller MySQL?

  4. Hvordan får man det samlede antal tabeller i postgresql?