执行精确搜索纪念空间

问题描述 投票:0回答:1

我正在使用SQL Server 2017,我的排序规则是SQL_LATIN1_GENERAL_CP1_CI_ASANSI_PADDING是默认值(ON)。

在我的表中,其中一列是NVARCHAR(255)类型,其中一个值是这样插入的(包括空格):

N'abc '

当我搜索它没有空间(N'abc'),我不想得到N'abc ',但它找到它。

我知道我可以在插入记录时删除空格,但不能更改已插入的记录。

如何通过这样的查询来阻止找到它?

CREATE TABLE #tmp (c1 nvarchar(255))

INSERT INTO #tmp 
VALUES (N'abc ')

SELECT * 
FROM #tmp 
WHERE c1 = N'abc'

DROP TABLE #tmp

我也发现了这篇文章,但是当我查询它的时候想要阻止它。

Why the SQL Server ignore the empty space at the end automatically?

我正在使用带有C#的Linq到实体,并且使用SQL查询,我可以使用'LIKE'关键字进行搜索而不使用百分比字符

SELECT * 
FROM #tmp 
WHERE c1 LIKE N'abc'

但是对于Linq,我不知道如何编写这个查询:

entity.Temp.Where(p => p.c1 == "abc");
entity.Temp.Where(p => p.c1.Equals("abc"));
entity.Temp.Where(p => p.c1.Contains("abc"));
sql-server linq-to-entities
1个回答
0
投票

你可以试试:

SELECT * FROM #tmp WHERE cast(c1 as varbinary(510)) = cast(N'abc' as varbinary(510))

如果你有很多行,这将是非常慢的,但它的工作原理。

© www.soinside.com 2019 - 2024. All rights reserved.