繁体   English   中英

SQL 服务器查询中的 Like 语句未返回所有结果

[英]Like statement in SQL Server query not returning all results

我有一个数据库表,其中有一列类型为nvarchar(max) ,值为 '17KAAKSPN13'

使用像 '%17KA%' 这样的 testcolumn 查询表时,不会返回任何结果。 如果我使用 '%17KAA%' 进行查询,我会得到一个结果。

要对此进行测试,请创建一个简单的表并执行以下查询,然后查看第二个查询没有返回任何结果:

更新:服务器排序规则:Danish_Norwegian_CI_AS

CREATE TABLE [dbo].testtable(
    testcolumn [nvarchar](max) NULL
) 

insert into [dbo].testtable (testcolumn) values('17KAAKSPN13')

SELECT * FROM [dbo].testtable 
SELECT * FROM [dbo].testtable WHERE testcolumn like '%17KA%'

结果:使用like查询时没有返回结果

编辑:

是它不起作用的示例。 我将其添加为编辑,因为有很多评论和两个不合适的小提琴。 这个问题似乎与整理有关。

来自这里 - https://stackoverflow.com/a/53802337/13927312

尝试看看在您的模式之前添加 N(将其标记为 Unicode)是否有任何区别。 它可能无法解释这种行为,但可以解决您的问题。

SELECT * FROM [dbo].testtable WHERE testcolumn like N'%17KA%'

您可以将 COLLATE 子句的 go 转换为排序规则,这使得LIKE可以解决。

SELECT * FROM [dbo].testtable WHERE testcolumn collate SQL_Latin1_General_CP1_CI_AS 
like '%17KA%' collate SQL_Latin1_General_CP1_CI_AS 

来自 MSDN 上的整理

字符文字和变量被分配了当前数据库的默认排序规则。 列引用被分配列的定义排序规则。

我认为问题在于在挪威语和丹麦语中,“AA”与“A”是不同的字符。 因此,您不能仅将其搜索为“A”。

原因是“AA”是代表Å的一种方式。

因此,您的代码工作正常。 您可以转换为不同的排序规则,其中'AA'只是'A'跟在'A'之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM