sql >> Databáze >  >> RDS >> Sqlserver

Proč by příkaz SqlServer select vybíral řádky, které se shodují, a řádky, které se shodují a mají mezery na konci

Abych přepracoval svou odpověď, LEN() není bezpečné testovat ANSI_PADDING, protože je definováno tak, že vrací délku bez koncových mezer, a DATALENGTH() je vhodnější, jak říká AdaTheDev.

Zajímavé je, že ANSI_PADDING je nastavení doby vložení a že je respektováno pro VARCHAR, ale ne pro NVARCHAR.

Za druhé, pokud vrátíte sloupec s mezerami na konci nebo použijete '=' pro rovnost, zdá se, že dojde k implicitnímu zkrácení mezery na konci.

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. Může být typ MySQL INT nenulový NULL

  2. Podporuje Microsoft OLE DB Provider pro SQL Server TLS 1.2

  3. Nepodařilo se připojit k MySQL na localhost:3306 s uživatelem root

  4. Jak mohu získat číslo měsíce (ne název měsíce) z data na serveru SQL?